Skip to content

Commit d3982a1

Browse files
authored
Merge pull request #5440 from element-hq/feature/bma/injectSessionId
Remove CurrentSessionIdHolder and inject SessionId instead.
2 parents 73627d9 + 4fee19c commit d3982a1

File tree

11 files changed

+31
-47
lines changed

11 files changed

+31
-47
lines changed

features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt
1313
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRtcNotificationContent
1414
import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent
1515
import io.element.android.libraries.matrix.api.core.EventId
16+
import io.element.android.libraries.matrix.api.core.SessionId
1617
import io.element.android.libraries.matrix.api.core.UserId
1718
import io.element.android.libraries.matrix.api.timeline.item.event.CallNotifyContent
1819
import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
@@ -31,7 +32,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StickerConten
3132
import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent
3233
import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent
3334
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
34-
import io.element.android.libraries.matrix.api.user.CurrentSessionIdHolder
3535

3636
@Inject
3737
class TimelineItemContentFactory(
@@ -45,7 +45,7 @@ class TimelineItemContentFactory(
4545
private val stateFactory: TimelineItemContentStateFactory,
4646
private val failedToParseMessageFactory: TimelineItemContentFailedToParseMessageFactory,
4747
private val failedToParseStateFactory: TimelineItemContentFailedToParseStateFactory,
48-
private val currentSessionIdHolder: CurrentSessionIdHolder,
48+
private val sessionId: SessionId,
4949
) {
5050
suspend fun create(eventTimelineItem: EventTimelineItem): TimelineItemEventContent {
5151
return create(
@@ -64,7 +64,7 @@ class TimelineItemContentFactory(
6464
sender: UserId,
6565
senderProfile: ProfileTimelineDetails,
6666
): TimelineItemEventContent {
67-
val isOutgoing = currentSessionIdHolder.current == sender
67+
val isOutgoing = sessionId == sender
6868
return when (itemContent) {
6969
is FailedToParseMessageLikeContent -> failedToParseMessageFactory.create(itemContent)
7070
is FailedToParseStateContent -> failedToParseStateFactory.create(itemContent)

features/messages/impl/src/test/kotlin/io/element/android/features/messages/impl/fixtures/TimelineItemsFactoryFixtures.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import io.element.android.libraries.dateformatter.test.FakeDateFormatter
3333
import io.element.android.libraries.eventformatter.api.TimelineEventFormatter
3434
import io.element.android.libraries.matrix.api.core.UserId
3535
import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
36-
import io.element.android.libraries.matrix.api.user.CurrentSessionIdHolder
3736
import io.element.android.libraries.matrix.test.FakeMatrixClient
3837
import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser
3938
import io.element.android.libraries.mediaviewer.test.util.FileExtensionExtractorWithoutValidation
@@ -78,7 +77,7 @@ internal fun TestScope.aTimelineItemsFactory(
7877
stateFactory = TimelineItemContentStateFactory(timelineEventFormatter),
7978
failedToParseMessageFactory = TimelineItemContentFailedToParseMessageFactory(),
8079
failedToParseStateFactory = TimelineItemContentFailedToParseStateFactory(),
81-
currentSessionIdHolder = CurrentSessionIdHolder(matrixClient),
80+
sessionId = matrixClient.sessionId,
8281
),
8382
matrixClient = matrixClient,
8483
dateFormatter = FakeDateFormatter(),

features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class SignedOutNode(
3232
) : NodeInputs
3333

3434
private val inputs: Inputs = inputs()
35-
private val presenter = presenterFactory.create(inputs.sessionId.value)
35+
private val presenter = presenterFactory.create(inputs.sessionId)
3636

3737
@Composable
3838
override fun View(modifier: Modifier) {

features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutPresenter.kt

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ package io.element.android.features.signedout.impl
99

1010
import androidx.compose.runtime.Composable
1111
import androidx.compose.runtime.collectAsState
12-
import androidx.compose.runtime.derivedStateOf
1312
import androidx.compose.runtime.getValue
1413
import androidx.compose.runtime.remember
1514
import androidx.compose.runtime.rememberCoroutineScope
@@ -18,35 +17,35 @@ import dev.zacsweers.metro.AssistedFactory
1817
import dev.zacsweers.metro.AssistedInject
1918
import io.element.android.libraries.architecture.Presenter
2019
import io.element.android.libraries.core.meta.BuildMeta
20+
import io.element.android.libraries.matrix.api.core.SessionId
2121
import io.element.android.libraries.sessionstorage.api.SessionStore
22+
import kotlinx.coroutines.flow.map
2223
import kotlinx.coroutines.launch
2324

2425
@AssistedInject
2526
class SignedOutPresenter(
26-
// Cannot inject SessionId
27-
@Assisted private val sessionId: String,
27+
@Assisted private val sessionId: SessionId,
2828
private val sessionStore: SessionStore,
2929
private val buildMeta: BuildMeta,
3030
) : Presenter<SignedOutState> {
3131
@AssistedFactory
3232
fun interface Factory {
33-
fun create(sessionId: String): SignedOutPresenter
33+
fun create(sessionId: SessionId): SignedOutPresenter
3434
}
3535

3636
@Composable
3737
override fun present(): SignedOutState {
38-
val sessions by remember {
39-
sessionStore.sessionsFlow()
40-
}.collectAsState(initial = emptyList())
4138
val signedOutSession by remember {
42-
derivedStateOf { sessions.firstOrNull { it.userId == sessionId } }
43-
}
39+
sessionStore.sessionsFlow().map { sessions ->
40+
sessions.firstOrNull { it.userId == sessionId.value }
41+
}
42+
}.collectAsState(initial = null)
4443
val coroutineScope = rememberCoroutineScope()
4544

4645
fun handleEvents(event: SignedOutEvents) {
4746
when (event) {
4847
SignedOutEvents.SignInAgain -> coroutineScope.launch {
49-
sessionStore.removeSession(sessionId)
48+
sessionStore.removeSession(sessionId.value)
5049
}
5150
}
5251
}

features/signedout/impl/src/test/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPointTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class DefaultSignedOutEntryPointTest {
2828
buildContext = buildContext,
2929
plugins = plugins,
3030
presenterFactory = { sessionId ->
31-
assertThat(sessionId).isEqualTo(A_SESSION_ID.value)
31+
assertThat(sessionId).isEqualTo(A_SESSION_ID)
3232
createSignedOutPresenter()
3333
}
3434
)

features/signedout/impl/src/test/kotlin/io/element/android/features/signedout/impl/SignedOutPresenterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ internal fun createSignedOutPresenter(
7070
sessionStore: SessionStore = InMemorySessionStore(),
7171
): SignedOutPresenter {
7272
return SignedOutPresenter(
73-
sessionId = sessionId.value,
73+
sessionId = sessionId,
7474
sessionStore = sessionStore,
7575
buildMeta = aBuildMeta(applicationName = AN_APPLICATION_NAME),
7676
)

features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ import io.element.android.libraries.architecture.inputs
3333
import io.element.android.libraries.di.SessionScope
3434
import io.element.android.libraries.matrix.api.core.EventId
3535
import io.element.android.libraries.matrix.api.core.RoomId
36+
import io.element.android.libraries.matrix.api.core.SessionId
3637
import io.element.android.libraries.matrix.api.core.UserId
37-
import io.element.android.libraries.matrix.api.user.CurrentSessionIdHolder
3838
import io.element.android.libraries.matrix.api.verification.VerificationRequest
3939
import io.element.android.libraries.mediaviewer.api.MediaViewerEntryPoint
4040
import kotlinx.parcelize.Parcelize
@@ -45,7 +45,7 @@ class UserProfileFlowNode(
4545
@Assisted buildContext: BuildContext,
4646
@Assisted plugins: List<Plugin>,
4747
private val elementCallEntryPoint: ElementCallEntryPoint,
48-
private val sessionIdHolder: CurrentSessionIdHolder,
48+
private val sessionId: SessionId,
4949
private val mediaViewerEntryPoint: MediaViewerEntryPoint,
5050
private val outgoingVerificationEntryPoint: OutgoingVerificationEntryPoint,
5151
) : BaseFlowNode<UserProfileFlowNode.NavTarget>(
@@ -82,7 +82,7 @@ class UserProfileFlowNode(
8282
}
8383

8484
override fun onStartCall(dmRoomId: RoomId) {
85-
elementCallEntryPoint.startCall(CallType.RoomCall(sessionId = sessionIdHolder.current, roomId = dmRoomId))
85+
elementCallEntryPoint.startCall(CallType.RoomCall(sessionId = sessionId, roomId = dmRoomId))
8686
}
8787

8888
override fun onVerifyUser(userId: UserId) {
@@ -99,7 +99,7 @@ class UserProfileFlowNode(
9999
}
100100

101101
override fun onViewInTimeline(eventId: EventId) {
102-
// Cannot happen
102+
// Cannot happen
103103
}
104104
}
105105
mediaViewerEntryPoint.nodeBuilder(this, buildContext)

features/userprofile/impl/src/test/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPointTest.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,8 @@ import io.element.android.features.verifysession.api.OutgoingVerificationEntryPo
1919
import io.element.android.libraries.matrix.api.core.EventId
2020
import io.element.android.libraries.matrix.api.core.RoomId
2121
import io.element.android.libraries.matrix.api.core.UserId
22-
import io.element.android.libraries.matrix.api.user.CurrentSessionIdHolder
22+
import io.element.android.libraries.matrix.test.A_SESSION_ID
2323
import io.element.android.libraries.matrix.test.A_USER_ID
24-
import io.element.android.libraries.matrix.test.FakeMatrixClient
2524
import io.element.android.libraries.mediaviewer.api.MediaViewerEntryPoint
2625
import io.element.android.tests.testutils.lambda.lambdaError
2726
import io.element.android.tests.testutils.node.TestParentNode
@@ -43,7 +42,7 @@ class DefaultUserProfileEntryPointTest {
4342
UserProfileFlowNode(
4443
buildContext = buildContext,
4544
plugins = plugins,
46-
sessionIdHolder = CurrentSessionIdHolder(FakeMatrixClient()),
45+
sessionId = A_SESSION_ID,
4746
elementCallEntryPoint = object : ElementCallEntryPoint {
4847
override fun startCall(callType: CallType) = lambdaError()
4948
override suspend fun handleIncomingCall(

libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/CurrentSessionIdHolder.kt

Lines changed: 0 additions & 19 deletions
This file was deleted.

libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import dev.zacsweers.metro.Provides
1313
import io.element.android.libraries.di.SessionScope
1414
import io.element.android.libraries.di.annotations.SessionCoroutineScope
1515
import io.element.android.libraries.matrix.api.MatrixClient
16+
import io.element.android.libraries.matrix.api.core.SessionId
1617
import io.element.android.libraries.matrix.api.encryption.EncryptionService
1718
import io.element.android.libraries.matrix.api.media.MatrixMediaLoader
1819
import io.element.android.libraries.matrix.api.media.MediaPreviewService
@@ -27,6 +28,11 @@ import kotlinx.coroutines.CoroutineScope
2728
@BindingContainer
2829
@ContributesTo(SessionScope::class)
2930
object SessionMatrixModule {
31+
@Provides
32+
fun providesSessionId(matrixClient: MatrixClient): SessionId {
33+
return matrixClient.sessionId
34+
}
35+
3036
@Provides
3137
fun providesSessionVerificationService(matrixClient: MatrixClient): SessionVerificationService {
3238
return matrixClient.sessionVerificationService()

0 commit comments

Comments
 (0)