Skip to content

Commit 909ce29

Browse files
authored
Merge pull request #6051 from vector-im/feature/fre/start_dm_on_first_msg
Start DM on first message (UI)
2 parents a5bf25f + b8cdf9d commit 909ce29

32 files changed

+751
-176
lines changed

changelog.d/5525.wip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Create DM room only on first message - Design implementation & debug feature flag

matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomService.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,18 @@ interface RoomService {
4040
*/
4141
suspend fun createRoom(createRoomParams: CreateRoomParams): String
4242

43+
/**
44+
* Create a room locally.
45+
* This room will not be synchronized with the server and will not come back from the sync, so all the events related to this room will be generated
46+
* locally.
47+
*/
48+
suspend fun createLocalRoom(createRoomParams: CreateRoomParams): String
49+
50+
/**
51+
* Delete a local room with all its related events.
52+
*/
53+
suspend fun deleteLocalRoom(roomId: String)
54+
4355
/**
4456
* Create a direct room asynchronously. This is a facility method to create a direct room with the necessary parameters.
4557
*/
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright 2022 The Matrix.org Foundation C.I.C.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.matrix.android.sdk.api.session.room.model.localecho
18+
19+
import java.util.UUID
20+
21+
object RoomLocalEcho {
22+
23+
private const val PREFIX = "!local."
24+
25+
/**
26+
* Tell whether the provider room id is a local id.
27+
*/
28+
fun isLocalEchoId(roomId: String) = roomId.startsWith(PREFIX)
29+
30+
internal fun createLocalEchoId() = "${PREFIX}${UUID.randomUUID()}"
31+
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/CurrentStateEventEntityQueries.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,20 @@ import io.realm.kotlin.createObject
2323
import org.matrix.android.sdk.internal.database.model.CurrentStateEventEntity
2424
import org.matrix.android.sdk.internal.database.model.CurrentStateEventEntityFields
2525

26+
internal fun CurrentStateEventEntity.Companion.whereRoomId(
27+
realm: Realm,
28+
roomId: String
29+
): RealmQuery<CurrentStateEventEntity> {
30+
return realm.where(CurrentStateEventEntity::class.java)
31+
.equalTo(CurrentStateEventEntityFields.ROOM_ID, roomId)
32+
}
33+
2634
internal fun CurrentStateEventEntity.Companion.whereType(
2735
realm: Realm,
2836
roomId: String,
2937
type: String
3038
): RealmQuery<CurrentStateEventEntity> {
31-
return realm.where(CurrentStateEventEntity::class.java)
32-
.equalTo(CurrentStateEventEntityFields.ROOM_ID, roomId)
39+
return whereRoomId(realm = realm, roomId = roomId)
3340
.equalTo(CurrentStateEventEntityFields.TYPE, type)
3441
}
3542

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ import org.matrix.android.sdk.internal.database.model.RoomMemberSummaryEntityFie
4343
import org.matrix.android.sdk.internal.di.SessionDatabase
4444
import org.matrix.android.sdk.internal.session.room.alias.DeleteRoomAliasTask
4545
import org.matrix.android.sdk.internal.session.room.alias.GetRoomIdByAliasTask
46+
import org.matrix.android.sdk.internal.session.room.create.CreateLocalRoomTask
4647
import org.matrix.android.sdk.internal.session.room.create.CreateRoomTask
48+
import org.matrix.android.sdk.internal.session.room.delete.DeleteLocalRoomTask
4749
import org.matrix.android.sdk.internal.session.room.membership.RoomChangeMembershipStateDataSource
4850
import org.matrix.android.sdk.internal.session.room.membership.RoomMemberHelper
4951
import org.matrix.android.sdk.internal.session.room.membership.joining.JoinRoomTask
@@ -60,6 +62,8 @@ import javax.inject.Inject
6062
internal class DefaultRoomService @Inject constructor(
6163
@SessionDatabase private val monarchy: Monarchy,
6264
private val createRoomTask: CreateRoomTask,
65+
private val createLocalRoomTask: CreateLocalRoomTask,
66+
private val deleteLocalRoomTask: DeleteLocalRoomTask,
6367
private val joinRoomTask: JoinRoomTask,
6468
private val markAllRoomsReadTask: MarkAllRoomsReadTask,
6569
private val updateBreadcrumbsTask: UpdateBreadcrumbsTask,
@@ -78,6 +82,14 @@ internal class DefaultRoomService @Inject constructor(
7882
return createRoomTask.executeRetry(createRoomParams, 3)
7983
}
8084

85+
override suspend fun createLocalRoom(createRoomParams: CreateRoomParams): String {
86+
return createLocalRoomTask.execute(createRoomParams)
87+
}
88+
89+
override suspend fun deleteLocalRoom(roomId: String) {
90+
deleteLocalRoomTask.execute(DeleteLocalRoomTask.Params(roomId))
91+
}
92+
8193
override fun getRoom(roomId: String): Room? {
8294
return roomGetter.getRoom(roomId)
8395
}

matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,12 @@ import org.matrix.android.sdk.internal.session.room.alias.DefaultGetRoomLocalAli
4343
import org.matrix.android.sdk.internal.session.room.alias.DeleteRoomAliasTask
4444
import org.matrix.android.sdk.internal.session.room.alias.GetRoomIdByAliasTask
4545
import org.matrix.android.sdk.internal.session.room.alias.GetRoomLocalAliasesTask
46+
import org.matrix.android.sdk.internal.session.room.create.CreateLocalRoomTask
4647
import org.matrix.android.sdk.internal.session.room.create.CreateRoomTask
48+
import org.matrix.android.sdk.internal.session.room.create.DefaultCreateLocalRoomTask
4749
import org.matrix.android.sdk.internal.session.room.create.DefaultCreateRoomTask
50+
import org.matrix.android.sdk.internal.session.room.delete.DefaultDeleteLocalRoomTask
51+
import org.matrix.android.sdk.internal.session.room.delete.DeleteLocalRoomTask
4852
import org.matrix.android.sdk.internal.session.room.directory.DefaultGetPublicRoomTask
4953
import org.matrix.android.sdk.internal.session.room.directory.DefaultGetRoomDirectoryVisibilityTask
5054
import org.matrix.android.sdk.internal.session.room.directory.DefaultSetRoomDirectoryVisibilityTask
@@ -204,6 +208,12 @@ internal abstract class RoomModule {
204208
@Binds
205209
abstract fun bindCreateRoomTask(task: DefaultCreateRoomTask): CreateRoomTask
206210

211+
@Binds
212+
abstract fun bindCreateLocalRoomTask(task: DefaultCreateLocalRoomTask): CreateLocalRoomTask
213+
214+
@Binds
215+
abstract fun bindDeleteLocalRoomTask(task: DefaultDeleteLocalRoomTask): DeleteLocalRoomTask
216+
207217
@Binds
208218
abstract fun bindGetPublicRoomTask(task: DefaultGetPublicRoomTask): GetPublicRoomTask
209219

0 commit comments

Comments
 (0)