diff --git a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt index 3f467b1d40..8be1e777a8 100644 --- a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt +++ b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt @@ -165,7 +165,7 @@ class ConfigureRoomPresenterTests { presenter.present() }.test { val initialState = awaitItem() - val createRoomResult = Result.success(RoomId("!createRoomResult")) + val createRoomResult = Result.success(RoomId("!createRoomResult:domain")) fakeMatrixClient.givenCreateRoomResult(createRoomResult) diff --git a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt index 4d26e68bcb..64d59b221c 100644 --- a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt +++ b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenterTests.kt @@ -81,8 +81,8 @@ class CreateRoomRootPresenterTests { presenter.present() }.test { val initialState = awaitItem() - val matrixUser = MatrixUser(UserId("@name:matrix.org")) - val createDmResult = Result.success(RoomId("!createDmResult")) + val matrixUser = MatrixUser(UserId("@name:domain")) + val createDmResult = Result.success(RoomId("!createDmResult:domain")) fakeMatrixClient.givenFindDmResult(null) fakeMatrixClient.givenCreateDmResult(createDmResult) @@ -101,8 +101,8 @@ class CreateRoomRootPresenterTests { presenter.present() }.test { val initialState = awaitItem() - val matrixUser = MatrixUser(UserId("@name:matrix.org")) - val fakeDmResult = FakeMatrixRoom(RoomId("!fakeDmResult")) + val matrixUser = MatrixUser(UserId("@name:domain")) + val fakeDmResult = FakeMatrixRoom(RoomId("!fakeDmResult:domain")) fakeMatrixClient.givenFindDmResult(fakeDmResult) @@ -119,8 +119,8 @@ class CreateRoomRootPresenterTests { presenter.present() }.test { val initialState = awaitItem() - val matrixUser = MatrixUser(UserId("@name:matrix.org")) - val createDmResult = Result.success(RoomId("!createDmResult")) + val matrixUser = MatrixUser(UserId("@name:domain")) + val createDmResult = Result.success(RoomId("!createDmResult:domain")) fakeUserListPresenter.givenState(aUserListState().copy(selectedUsers = persistentListOf(matrixUser))) fakeMatrixClient.givenFindDmResult(null) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/root/LoginRootStateProvider.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/root/LoginRootStateProvider.kt index f95140a91d..9864bf2380 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/root/LoginRootStateProvider.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/root/LoginRootStateProvider.kt @@ -28,7 +28,7 @@ open class LoginRootStateProvider : PreviewParameterProvider { aLoginRootState().copy(formState = LoginFormState("user", "pass")), aLoginRootState().copy(formState = LoginFormState("user", "pass"), loggedInState = LoggedInState.LoggingIn), aLoginRootState().copy(formState = LoginFormState("user", "pass"), loggedInState = LoggedInState.ErrorLoggingIn(Throwable())), - aLoginRootState().copy(formState = LoginFormState("user", "pass"), loggedInState = LoggedInState.LoggedIn(SessionId("1234"))), + aLoginRootState().copy(formState = LoginFormState("user", "pass"), loggedInState = LoggedInState.LoggedIn(SessionId("@user:domain"))), ) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index e1abba7ac4..619298b4f5 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -36,9 +36,9 @@ open class MessagesStateProvider : PreviewParameterProvider { } fun aMessagesState() = MessagesState( - roomId = RoomId("!id"), + roomId = RoomId("!id:domain"), roomName = "Room name", - roomAvatar = AvatarData("!id", "Room name"), + roomAvatar = AvatarData("!id:domain", "Room name"), composerState = aMessageComposerState().copy( text = StableCharSequence("Hello"), isFullScreen = false, 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 df222911b0..f6eaa55267 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 @@ -28,6 +28,7 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.MatrixTimeline import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf +import kotlin.random.Random fun aTimelineState() = TimelineState( timelineItems = persistentListOf(), @@ -78,12 +79,12 @@ internal fun aTimelineItemEvent( content: TimelineItemEventContent = aTimelineItemContent(), groupPosition: TimelineItemGroupPosition = TimelineItemGroupPosition.First ): TimelineItem.Event { - val randomId = Math.random().toString() + val randomId = "\$" + Random.nextInt().toString() return TimelineItem.Event( id = randomId, eventId = EventId(randomId), - senderId = UserId("@senderId"), - senderAvatar = AvatarData("@senderId", "sender"), + senderId = UserId("@senderId:domain"), + senderAvatar = AvatarData("@senderId:domain", "sender"), content = content, reactionsState = TimelineItemReactions( persistentListOf( diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt index 855045ed6d..ffd510a144 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -38,7 +38,7 @@ open class RoomListStateProvider : PreviewParameterProvider { } internal fun aRoomListState() = RoomListState( - matrixUser = MatrixUser(id = UserId("@id"), username = "User#1", avatarData = AvatarData("@id", "U")), + matrixUser = MatrixUser(id = UserId("@id:domain"), username = "User#1", avatarData = AvatarData("@id:domain", "U")), roomList = aRoomListRoomSummaryList(), filter = "filter", hasNetworkConnection = true, @@ -55,7 +55,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { timestamp = "14:18", lastMessage = "A very very very very long message which suites on two lines", avatarData = AvatarData("!id", "R"), - id = "roomId" + id = "!roomId:domain" ), RoomListRoomSummary( name = "Room#2", @@ -63,8 +63,8 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { timestamp = "14:16", lastMessage = "A short message", avatarData = AvatarData("!id", "Z"), - id = "roomId2" + id = "!roomId2:domain" ), - RoomListRoomSummaryPlaceholders.create("roomId2") + RoomListRoomSummaryPlaceholders.create("!roomId2:domain") ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt index f9bdefd95e..1d1a4e7c10 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt @@ -249,7 +249,7 @@ internal fun DefaultRoomListTopBarDarkPreview() = ElementPreviewDark { DefaultRo @Composable private fun DefaultRoomListTopBarPreview() { DefaultRoomListTopBar( - matrixUser = MatrixUser(UserId("@id"), "Alice", AvatarData("@id", "Alice")), + matrixUser = MatrixUser(UserId("@id:domain"), "Alice", AvatarData("@id:domain", "Alice")), scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()), ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryPlaceholders.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryPlaceholders.kt index 551f9ca8ba..ba42bcff9a 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryPlaceholders.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryPlaceholders.kt @@ -34,7 +34,7 @@ object RoomListRoomSummaryPlaceholders { fun createFakeList(size: Int): List { return mutableListOf().apply { repeat(size) { - add(create("\$fakeRoom$it")) + add(create("!fakeRoom$it:domain")) } } } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 082b8af048..4eee92d597 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -34,7 +34,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider().inject(this) Timber.tag(loggerTag.value).v("NotificationBroadcastReceiver received : $intent") - val sessionId = intent.extras?.getString(KEY_SESSION_ID)?.asSessionId() ?: return + val sessionId = intent.extras?.getString(KEY_SESSION_ID)?.let(::SessionId) ?: return + val roomId = intent.getStringExtra(KEY_ROOM_ID)?.let(::RoomId) when (intent.action) { actionIds.smartReply -> handleSmartReply(intent, context) - actionIds.dismissRoom -> - intent.getStringExtra(KEY_ROOM_ID)?.asRoomId()?.let { roomId -> - notificationDrawerManager.clearMessagesForRoom(sessionId, roomId) - } + actionIds.dismissRoom -> if (roomId != null) { + notificationDrawerManager.clearMessagesForRoom(sessionId, roomId) + } actionIds.dismissSummary -> notificationDrawerManager.clearAllEvents(sessionId) - actionIds.markRoomRead -> - intent.getStringExtra(KEY_ROOM_ID)?.asRoomId()?.let { roomId -> - notificationDrawerManager.clearMessagesForRoom(sessionId, roomId) - handleMarkAsRead(sessionId, roomId) - } - actionIds.join -> { - intent.getStringExtra(KEY_ROOM_ID)?.asRoomId()?.let { roomId -> - notificationDrawerManager.clearMemberShipNotificationForRoom(sessionId, roomId) - handleJoinRoom(sessionId, roomId) - } + actionIds.markRoomRead -> if (roomId != null) { + notificationDrawerManager.clearMessagesForRoom(sessionId, roomId) + handleMarkAsRead(sessionId, roomId) } - actionIds.reject -> { - intent.getStringExtra(KEY_ROOM_ID)?.asRoomId()?.let { roomId -> - notificationDrawerManager.clearMemberShipNotificationForRoom(sessionId, roomId) - handleRejectRoom(sessionId, roomId) - } + actionIds.join -> if (roomId != null) { + notificationDrawerManager.clearMemberShipNotificationForRoom(sessionId, roomId) + handleJoinRoom(sessionId, roomId) + } + actionIds.reject -> if (roomId != null) { + notificationDrawerManager.clearMemberShipNotificationForRoom(sessionId, roomId) + handleRejectRoom(sessionId, roomId) } } } @@ -125,9 +118,9 @@ class NotificationBroadcastReceiver : BroadcastReceiver() { private fun handleSmartReply(intent: Intent, context: Context) { val message = getReplyMessage(intent) - val sessionId = intent.getStringExtra(KEY_SESSION_ID)?.asSessionId() - val roomId = intent.getStringExtra(KEY_ROOM_ID)?.asRoomId() - val threadId = intent.getStringExtra(KEY_THREAD_ID)?.asThreadId() + val sessionId = intent.getStringExtra(KEY_SESSION_ID)?.let(::SessionId) + val roomId = intent.getStringExtra(KEY_ROOM_ID)?.let(::RoomId) + val threadId = intent.getStringExtra(KEY_THREAD_ID)?.let(::ThreadId) if (message.isNullOrBlank() || roomId == null) { // ignore this event diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt index 4979eb3ddb..d04bae7e18 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt @@ -63,7 +63,7 @@ class PendingIntentFactory @Inject constructor( fun createDismissSummaryPendingIntent(sessionId: SessionId): PendingIntent { val intent = Intent(context, NotificationBroadcastReceiver::class.java) intent.action = actionIds.dismissSummary - intent.data = createIgnoredUri("deleteSummary/${sessionId.value}") + intent.data = createIgnoredUri("deleteSummary/$sessionId") intent.putExtra(NotificationBroadcastReceiver.KEY_SESSION_ID, sessionId.value) return PendingIntent.getBroadcast( context, @@ -76,7 +76,7 @@ class PendingIntentFactory @Inject constructor( fun createDismissRoomPendingIntent(sessionId: SessionId, roomId: RoomId): PendingIntent { val intent = Intent(context, NotificationBroadcastReceiver::class.java) intent.action = actionIds.dismissRoom - intent.data = createIgnoredUri("deleteRoom/${sessionId.value}/${roomId.value}") + intent.data = createIgnoredUri("deleteRoom/$sessionId/$roomId") intent.putExtra(NotificationBroadcastReceiver.KEY_SESSION_ID, sessionId.value) intent.putExtra(NotificationBroadcastReceiver.KEY_ROOM_ID, roomId.value) return PendingIntent.getBroadcast( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt index a42ba3c86e..a5f72acfb9 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt @@ -78,7 +78,7 @@ class QuickReplyActionFactory @Inject constructor( return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val intent = Intent(context, NotificationBroadcastReceiver::class.java) intent.action = actionIds.smartReply - intent.data = createIgnoredUri("quickReply/${sessionId.value}/${roomId.value}" + threadId?.let { "/${it.value}" }.orEmpty()) + intent.data = createIgnoredUri("quickReply/$sessionId/$roomId" + threadId?.let { "/$it" }.orEmpty()) intent.putExtra(NotificationBroadcastReceiver.KEY_SESSION_ID, sessionId.value) intent.putExtra(NotificationBroadcastReceiver.KEY_ROOM_ID, roomId.value) threadId?.let { diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationEventQueueTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationEventQueueTest.kt index 4bec096468..eebf420591 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationEventQueueTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationEventQueueTest.kt @@ -35,21 +35,21 @@ class NotificationEventQueueTest { fun `given events when redacting some then marks matching event ids as redacted`() { val queue = givenQueue( listOf( - aSimpleNotifiableEvent(eventId = EventId("redacted-id-1")), - aNotifiableMessageEvent(eventId = EventId("redacted-id-2")), - anInviteNotifiableEvent(eventId = EventId("redacted-id-3")), - aSimpleNotifiableEvent(eventId = EventId("kept-id")), + aSimpleNotifiableEvent(eventId = EventId("\$redacted-id-1")), + aNotifiableMessageEvent(eventId = EventId("\$redacted-id-2")), + anInviteNotifiableEvent(eventId = EventId("\$redacted-id-3")), + aSimpleNotifiableEvent(eventId = EventId("\$kept-id")), ) ) - queue.markRedacted(listOf(EventId("redacted-id-1"), EventId("redacted-id-2"), EventId("redacted-id-3"))) + queue.markRedacted(listOf(EventId("\$redacted-id-1"), EventId("\$redacted-id-2"), EventId("\$redacted-id-3"))) assertThat(queue.rawEvents()).isEqualTo( listOf( - aSimpleNotifiableEvent(eventId = EventId("redacted-id-1"), isRedacted = true), - aNotifiableMessageEvent(eventId = EventId("redacted-id-2"), isRedacted = true), - anInviteNotifiableEvent(eventId = EventId("redacted-id-3"), isRedacted = true), - aSimpleNotifiableEvent(eventId = EventId("kept-id"), isRedacted = false), + aSimpleNotifiableEvent(eventId = EventId("\$redacted-id-1"), isRedacted = true), + aNotifiableMessageEvent(eventId = EventId("\$redacted-id-2"), isRedacted = true), + anInviteNotifiableEvent(eventId = EventId("\$redacted-id-3"), isRedacted = true), + aSimpleNotifiableEvent(eventId = EventId("\$kept-id"), isRedacted = false), ) ) } @@ -179,8 +179,8 @@ class NotificationEventQueueTest { @Test fun `given event when adding new event with edited event id matching the existing event id then updates existing event`() { - val editedEvent = aSimpleNotifiableEvent(eventId = EventId("id-to-edit")) - val updatedEvent = editedEvent.copy(eventId = EventId("1"), editedEventId = EventId("id-to-edit"), title = "updated title", isUpdated = true) + val editedEvent = aSimpleNotifiableEvent(eventId = EventId("\$id-to-edit")) + val updatedEvent = editedEvent.copy(eventId = EventId("\$1"), editedEventId = EventId("\$id-to-edit"), title = "updated title", isUpdated = true) val queue = givenQueue(listOf(editedEvent)) queue.add(updatedEvent) @@ -190,8 +190,8 @@ class NotificationEventQueueTest { @Test fun `given event when adding new event with edited event id matching the existing event edited id then updates existing event`() { - val editedEvent = aSimpleNotifiableEvent(eventId = EventId("0"), editedEventId = EventId("id-to-edit")) - val updatedEvent = editedEvent.copy(eventId = EventId("1"), editedEventId = EventId("id-to-edit"), title = "updated title", isUpdated = true) + val editedEvent = aSimpleNotifiableEvent(eventId = EventId("\$0"), editedEventId = EventId("\$id-to-edit")) + val updatedEvent = editedEvent.copy(eventId = EventId("\$1"), editedEventId = EventId("\$id-to-edit"), title = "updated title", isUpdated = true) val queue = givenQueue(listOf(editedEvent)) queue.add(updatedEvent) diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationFactoryTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationFactoryTest.kt index 7cc9479ee9..9fbd723071 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationFactoryTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/NotificationFactoryTest.kt @@ -171,10 +171,10 @@ class NotificationFactoryTest { val roomWithRedactedMessage = mapOf( A_ROOM_ID to listOf( ProcessedEvent(ProcessedEvent.Type.KEEP, A_MESSAGE_EVENT.copy(isRedacted = true)), - ProcessedEvent(ProcessedEvent.Type.KEEP, A_MESSAGE_EVENT.copy(eventId = EventId("not-redacted"))) + ProcessedEvent(ProcessedEvent.Type.KEEP, A_MESSAGE_EVENT.copy(eventId = EventId("\$not-redacted"))) ) ) - val withRedactedRemoved = listOf(A_MESSAGE_EVENT.copy(eventId = EventId("not-redacted"))) + val withRedactedRemoved = listOf(A_MESSAGE_EVENT.copy(eventId = EventId("\$not-redacted"))) val expectedNotification = roomGroupMessageCreator.givenCreatesRoomMessageFor( A_SESSION_ID, withRedactedRemoved, diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/push/providers/firebase/FirebaseNewTokenHandler.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/push/providers/firebase/FirebaseNewTokenHandler.kt index 58464b5af0..c567b03bb9 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/push/providers/firebase/FirebaseNewTokenHandler.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/push/providers/firebase/FirebaseNewTokenHandler.kt @@ -18,7 +18,7 @@ package io.element.android.libraries.push.providers.firebase import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService -import io.element.android.libraries.matrix.api.core.asSessionId +import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.providers.api.PusherSubscriber import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.libraries.sessionstorage.api.SessionStore @@ -42,7 +42,7 @@ class FirebaseNewTokenHandler @Inject constructor( firebaseStore.storeFcmToken(firebaseToken) // Register the pusher for all the sessions sessionStore.getAllSessions().toUserList() - .mapNotNull { it.asSessionId() } + .map { SessionId(it) } .forEach { userId -> val userDataStore = userPushStoreFactory.create(userId) if (userDataStore.getPushProviderName() == FirebaseConfig.name) { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/push/providers/firebase/PushDataFirebase.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/push/providers/firebase/PushDataFirebase.kt index 5c336e7dc6..c244c39f02 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/push/providers/firebase/PushDataFirebase.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/push/providers/firebase/PushDataFirebase.kt @@ -16,8 +16,8 @@ package io.element.android.libraries.push.providers.firebase -import io.element.android.libraries.matrix.api.core.asEventId -import io.element.android.libraries.matrix.api.core.asRoomId +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.push.providers.api.PushData /** @@ -41,8 +41,8 @@ data class PushDataFirebase( ) fun PushDataFirebase.toPushData(): PushData? { - val safeEventId = eventId?.asEventId() ?: return null - val safeRoomId = roomId?.asRoomId() ?: return null + val safeEventId = eventId?.let(::EventId) ?: return null + val safeRoomId = roomId?.let(::RoomId) ?: return null return PushData( eventId = safeEventId, roomId = safeRoomId, diff --git a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/push/providers/firebase/FirebasePushParserTest.kt b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/push/providers/firebase/FirebasePushParserTest.kt index 562aecc790..0729a9d340 100644 --- a/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/push/providers/firebase/FirebasePushParserTest.kt +++ b/libraries/pushproviders/firebase/src/test/kotlin/io/element/android/libraries/push/providers/firebase/FirebasePushParserTest.kt @@ -20,7 +20,7 @@ import com.google.common.truth.Truth.assertThat import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.push.providers.api.PushData -import io.element.android.tests.testutils.assertNullOrThrow +import io.element.android.tests.testutils.assertThrowsInDebug import org.junit.Test class FirebasePushParserTest { @@ -52,26 +52,26 @@ class FirebasePushParserTest { fun `test empty roomId`() { val pushParser = FirebasePushParser() assertThat(pushParser.parse(FIREBASE_PUSH_DATA.mutate("room_id", null))).isNull() - assertNullOrThrow { pushParser.parse(FIREBASE_PUSH_DATA.mutate("room_id", "")) } + assertThrowsInDebug { pushParser.parse(FIREBASE_PUSH_DATA.mutate("room_id", "")) } } @Test fun `test invalid roomId`() { val pushParser = FirebasePushParser() - assertNullOrThrow { pushParser.parse(FIREBASE_PUSH_DATA.mutate("room_id", "aRoomId:domain")) } + assertThrowsInDebug { pushParser.parse(FIREBASE_PUSH_DATA.mutate("room_id", "aRoomId:domain")) } } @Test fun `test empty eventId`() { val pushParser = FirebasePushParser() assertThat(pushParser.parse(FIREBASE_PUSH_DATA.mutate("event_id", null))).isNull() - assertNullOrThrow { pushParser.parse(FIREBASE_PUSH_DATA.mutate("event_id", "")) } + assertThrowsInDebug { pushParser.parse(FIREBASE_PUSH_DATA.mutate("event_id", "")) } } @Test fun `test invalid eventId`() { val pushParser = FirebasePushParser() - assertNullOrThrow { pushParser.parse(FIREBASE_PUSH_DATA.mutate("event_id", "anEventId")) } + assertThrowsInDebug { pushParser.parse(FIREBASE_PUSH_DATA.mutate("event_id", "anEventId")) } } companion object { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/push/providers/unifiedpush/PushDataUnifiedPush.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/push/providers/unifiedpush/PushDataUnifiedPush.kt index 618a3c989f..44ea4704f5 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/push/providers/unifiedpush/PushDataUnifiedPush.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/push/providers/unifiedpush/PushDataUnifiedPush.kt @@ -16,8 +16,8 @@ package io.element.android.libraries.push.providers.unifiedpush -import io.element.android.libraries.matrix.api.core.asEventId -import io.element.android.libraries.matrix.api.core.asRoomId +import io.element.android.libraries.matrix.api.core.EventId +import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.push.providers.api.PushData import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -56,8 +56,8 @@ data class PushDataUnifiedPushCounts( ) fun PushDataUnifiedPush.toPushData(clientSecret: String): PushData? { - val safeEventId = notification?.eventId?.asEventId() ?: return null - val safeRoomId = notification.roomId?.asRoomId() ?: return null + val safeEventId = notification?.eventId?.let(::EventId) ?: return null + val safeRoomId = notification.roomId?.let(::RoomId) ?: return null return PushData( eventId = safeEventId, roomId = safeRoomId, diff --git a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/push/providers/unifiedpush/UnifiedPushParserTest.kt b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/push/providers/unifiedpush/UnifiedPushParserTest.kt index 19231505cc..9996339c44 100644 --- a/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/push/providers/unifiedpush/UnifiedPushParserTest.kt +++ b/libraries/pushproviders/unifiedpush/src/test/kotlin/io/element/android/libraries/push/providers/unifiedpush/UnifiedPushParserTest.kt @@ -20,7 +20,7 @@ import com.google.common.truth.Truth.assertThat import io.element.android.libraries.matrix.test.AN_EVENT_ID import io.element.android.libraries.matrix.test.A_ROOM_ID import io.element.android.libraries.push.providers.api.PushData -import io.element.android.tests.testutils.assertNullOrThrow +import io.element.android.tests.testutils.assertThrowsInDebug import org.junit.Test class UnifiedPushParserTest { @@ -52,7 +52,7 @@ class UnifiedPushParserTest { @Test fun `test empty roomId`() { val pushParser = UnifiedPushParser() - assertNullOrThrow { + assertThrowsInDebug { pushParser.parse(UNIFIED_PUSH_DATA.replace(A_ROOM_ID.value, "").toByteArray(), aClientSecret) } } @@ -60,7 +60,7 @@ class UnifiedPushParserTest { @Test fun `test invalid roomId`() { val pushParser = UnifiedPushParser() - assertNullOrThrow { + assertThrowsInDebug { pushParser.parse(UNIFIED_PUSH_DATA.mutate(A_ROOM_ID.value, "aRoomId:domain"), aClientSecret) } } @@ -68,7 +68,7 @@ class UnifiedPushParserTest { @Test fun `test empty eventId`() { val pushParser = UnifiedPushParser() - assertNullOrThrow { + assertThrowsInDebug { pushParser.parse(UNIFIED_PUSH_DATA.mutate(AN_EVENT_ID.value, ""), aClientSecret) } } @@ -76,14 +76,14 @@ class UnifiedPushParserTest { @Test fun `test invalid eventId`() { val pushParser = UnifiedPushParser() - assertNullOrThrow { + assertThrowsInDebug { pushParser.parse(UNIFIED_PUSH_DATA.mutate(AN_EVENT_ID.value, "anEventId"), aClientSecret) } } companion object { private val UNIFIED_PUSH_DATA = - "{\"notification\":{\"event_id\":\"${AN_EVENT_ID.value}\",\"room_id\":\"${A_ROOM_ID.value}\",\"counts\":{\"unread\":1},\"prio\":\"high\"}}" + "{\"notification\":{\"event_id\":\"$AN_EVENT_ID\",\"room_id\":\"$A_ROOM_ID\",\"counts\":{\"unread\":1},\"prio\":\"high\"}}" // TODO Check client secret format? } } diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt index ed32dba472..a84fe2ea69 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt @@ -22,7 +22,6 @@ import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.core.SessionId -import io.element.android.libraries.matrix.api.core.asSessionId import io.element.android.libraries.pushstore.api.UserPushStore import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.libraries.sessionstorage.api.observer.SessionListener @@ -60,6 +59,6 @@ class DefaultUserPushStoreFactory @Inject constructor( override suspend fun onSessionDeleted(userId: String) { // Delete the store - userId.asSessionId()?.let { create(it).reset() } + create(SessionId(userId)).reset() } } diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/PushClientSecretStoreDataStore.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/PushClientSecretStoreDataStore.kt index 2431120c9e..92ba2bfe1e 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/PushClientSecretStoreDataStore.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/PushClientSecretStoreDataStore.kt @@ -26,7 +26,6 @@ import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.matrix.api.core.SessionId -import io.element.android.libraries.matrix.api.core.asSessionId import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretStore import kotlinx.coroutines.flow.first import javax.inject.Inject @@ -58,7 +57,7 @@ class PushClientSecretStoreDataStore @Inject constructor( val matchingKey = keyValues.keys.find { keyValues[it] == clientSecret } - return matchingKey?.name?.asSessionId() + return matchingKey?.name?.let(::SessionId) } private fun getPreferenceKeyForUser(userId: SessionId) = stringPreferencesKey(userId.value) diff --git a/libraries/pushstore/impl/src/test/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/PushClientSecretImplTest.kt b/libraries/pushstore/impl/src/test/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/PushClientSecretImplTest.kt index d7f8e2e337..4f5316497d 100644 --- a/libraries/pushstore/impl/src/test/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/PushClientSecretImplTest.kt +++ b/libraries/pushstore/impl/src/test/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/PushClientSecretImplTest.kt @@ -24,8 +24,8 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runTest import org.junit.Test -private val A_USER_ID_0 = SessionId("A_USER_ID_0") -private val A_USER_ID_1 = SessionId("A_USER_ID_1") +private val A_USER_ID_0 = SessionId("@A_USER_ID_0:domain") +private val A_USER_ID_1 = SessionId("@A_USER_ID_1:domain") private const val A_UNKNOWN_SECRET = "A_UNKNOWN_SECRET" diff --git a/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/NullOrThrow.kt b/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/AssertThrowInDebug.kt similarity index 80% rename from tests/testutils/src/main/kotlin/io/element/android/tests/testutils/NullOrThrow.kt rename to tests/testutils/src/main/kotlin/io/element/android/tests/testutils/AssertThrowInDebug.kt index adfd58da5f..873255f203 100644 --- a/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/NullOrThrow.kt +++ b/tests/testutils/src/main/kotlin/io/element/android/tests/testutils/AssertThrowInDebug.kt @@ -16,18 +16,17 @@ package io.element.android.tests.testutils -import com.google.common.truth.Truth.assertThat import org.junit.Assert.assertThrows /** - * Assert that the lambda throws on debug and returns null on release. + * Assert that the lambda throws only on debug mode. */ -fun assertNullOrThrow(lambda: () -> Any?) { +fun assertThrowsInDebug(lambda: () -> Any?) { if (BuildConfig.DEBUG) { assertThrows(IllegalStateException::class.java) { lambda() } } else { - assertThat(lambda()).isNull() + lambda() } }