From 0a7de7cc7d4b62b0e76387f2f1a917f979ed279e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Oct 2024 10:36:14 +0200 Subject: [PATCH] Remove dependencies to other presenters to LeaveRoomPresenter. --- .../leaveroom/api/LeaveRoomPresenter.kt | 16 ------------- ...RoomPresenter.kt => LeaveRoomPresenter.kt} | 9 +++---- .../leaveroom/impl/di/LeaveRoomModule.kt | 23 ++++++++++++++++++ ...enterTest.kt => LeaveRoomPresenterTest.kt} | 24 +++++++++---------- .../leaveroom/fake/FakeLeaveRoomPresenter.kt | 4 ++-- .../roomdetails/impl/RoomDetailsPresenter.kt | 4 ++-- .../roomdetails/RoomDetailsPresenterTest.kt | 5 ++-- .../roomlist/impl/RoomListPresenter.kt | 4 ++-- .../roomlist/impl/RoomListPresenterTest.kt | 4 ++-- 9 files changed, 49 insertions(+), 44 deletions(-) delete mode 100644 features/leaveroom/api/src/main/kotlin/io/element/android/features/leaveroom/api/LeaveRoomPresenter.kt rename features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/{DefaultLeaveRoomPresenter.kt => LeaveRoomPresenter.kt} (93%) create mode 100644 features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomModule.kt rename features/leaveroom/impl/src/test/kotlin/io/element/android/features/leaveroom/impl/{DefaultLeaveRoomPresenterTest.kt => LeaveRoomPresenterTest.kt} (92%) diff --git a/features/leaveroom/api/src/main/kotlin/io/element/android/features/leaveroom/api/LeaveRoomPresenter.kt b/features/leaveroom/api/src/main/kotlin/io/element/android/features/leaveroom/api/LeaveRoomPresenter.kt deleted file mode 100644 index f7d7cf7297..0000000000 --- a/features/leaveroom/api/src/main/kotlin/io/element/android/features/leaveroom/api/LeaveRoomPresenter.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2023, 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only - * Please see LICENSE in the repository root for full details. - */ - -package io.element.android.features.leaveroom.api - -import androidx.compose.runtime.Composable -import io.element.android.libraries.architecture.Presenter - -interface LeaveRoomPresenter : Presenter { - @Composable - override fun present(): LeaveRoomState -} diff --git a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/DefaultLeaveRoomPresenter.kt b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt similarity index 93% rename from features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/DefaultLeaveRoomPresenter.kt rename to features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt index bb249846ee..168a684922 100644 --- a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/DefaultLeaveRoomPresenter.kt +++ b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt @@ -12,16 +12,14 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import com.squareup.anvil.annotations.ContributesBinding import io.element.android.features.leaveroom.api.LeaveRoomEvent -import io.element.android.features.leaveroom.api.LeaveRoomPresenter import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.api.LeaveRoomState.Confirmation.Dm import io.element.android.features.leaveroom.api.LeaveRoomState.Confirmation.Generic import io.element.android.features.leaveroom.api.LeaveRoomState.Confirmation.LastUserInRoom import io.element.android.features.leaveroom.api.LeaveRoomState.Confirmation.PrivateRoom +import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.RoomMembershipObserver @@ -30,12 +28,11 @@ import kotlinx.coroutines.launch import timber.log.Timber import javax.inject.Inject -@ContributesBinding(SessionScope::class) -class DefaultLeaveRoomPresenter @Inject constructor( +class LeaveRoomPresenter @Inject constructor( private val client: MatrixClient, private val roomMembershipObserver: RoomMembershipObserver, private val dispatchers: CoroutineDispatchers, -) : LeaveRoomPresenter { +) : Presenter { @Composable override fun present(): LeaveRoomState { val scope = rememberCoroutineScope() diff --git a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomModule.kt b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomModule.kt new file mode 100644 index 0000000000..8dbe4db368 --- /dev/null +++ b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomModule.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only + * Please see LICENSE in the repository root for full details. + */ + +package io.element.android.features.leaveroom.impl.di + +import com.squareup.anvil.annotations.ContributesTo +import dagger.Binds +import dagger.Module +import io.element.android.features.leaveroom.api.LeaveRoomState +import io.element.android.features.leaveroom.impl.LeaveRoomPresenter +import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.di.SessionScope + +@ContributesTo(SessionScope::class) +@Module +interface LeaveRoomModule { + @Binds + fun bindLeaveRoomPresenter(presenter: LeaveRoomPresenter): Presenter +} diff --git a/features/leaveroom/impl/src/test/kotlin/io/element/android/features/leaveroom/impl/DefaultLeaveRoomPresenterTest.kt b/features/leaveroom/impl/src/test/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenterTest.kt similarity index 92% rename from features/leaveroom/impl/src/test/kotlin/io/element/android/features/leaveroom/impl/DefaultLeaveRoomPresenterTest.kt rename to features/leaveroom/impl/src/test/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenterTest.kt index 1454c84296..9689de4eb2 100644 --- a/features/leaveroom/impl/src/test/kotlin/io/element/android/features/leaveroom/impl/DefaultLeaveRoomPresenterTest.kt +++ b/features/leaveroom/impl/src/test/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenterTest.kt @@ -27,13 +27,13 @@ import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test -class DefaultLeaveRoomPresenterTest { +class LeaveRoomPresenterTest { @get:Rule val warmUpRule = WarmUpRule() @Test fun `present - initial state hides all dialogs`() = runTest { - val presenter = createDefaultLeaveRoomPresenter() + val presenter = createLeaveRoomPresenter() moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { @@ -46,7 +46,7 @@ class DefaultLeaveRoomPresenterTest { @Test fun `present - show generic confirmation`() = runTest { - val presenter = createDefaultLeaveRoomPresenter( + val presenter = createLeaveRoomPresenter( client = FakeMatrixClient().apply { givenGetRoomResult( roomId = A_ROOM_ID, @@ -66,7 +66,7 @@ class DefaultLeaveRoomPresenterTest { @Test fun `present - show private room confirmation`() = runTest { - val presenter = createDefaultLeaveRoomPresenter( + val presenter = createLeaveRoomPresenter( client = FakeMatrixClient().apply { givenGetRoomResult( roomId = A_ROOM_ID, @@ -86,7 +86,7 @@ class DefaultLeaveRoomPresenterTest { @Test fun `present - show last user in room confirmation`() = runTest { - val presenter = createDefaultLeaveRoomPresenter( + val presenter = createLeaveRoomPresenter( client = FakeMatrixClient().apply { givenGetRoomResult( roomId = A_ROOM_ID, @@ -106,7 +106,7 @@ class DefaultLeaveRoomPresenterTest { @Test fun `present - show DM confirmation`() = runTest { - val presenter = createDefaultLeaveRoomPresenter( + val presenter = createLeaveRoomPresenter( client = FakeMatrixClient().apply { givenGetRoomResult( roomId = A_ROOM_ID, @@ -127,7 +127,7 @@ class DefaultLeaveRoomPresenterTest { @Test fun `present - leaving a room leaves the room`() = runTest { val roomMembershipObserver = RoomMembershipObserver() - val presenter = createDefaultLeaveRoomPresenter( + val presenter = createLeaveRoomPresenter( client = FakeMatrixClient().apply { givenGetRoomResult( roomId = A_ROOM_ID, @@ -151,7 +151,7 @@ class DefaultLeaveRoomPresenterTest { @Test fun `present - show error if leave room fails`() = runTest { - val presenter = createDefaultLeaveRoomPresenter( + val presenter = createLeaveRoomPresenter( client = FakeMatrixClient().apply { givenGetRoomResult( roomId = A_ROOM_ID, @@ -175,7 +175,7 @@ class DefaultLeaveRoomPresenterTest { @Test fun `present - show progress indicator while leaving a room`() = runTest { - val presenter = createDefaultLeaveRoomPresenter( + val presenter = createLeaveRoomPresenter( client = FakeMatrixClient().apply { givenGetRoomResult( roomId = A_ROOM_ID, @@ -199,7 +199,7 @@ class DefaultLeaveRoomPresenterTest { @Test fun `present - hide error hides the error`() = runTest { - val presenter = createDefaultLeaveRoomPresenter( + val presenter = createLeaveRoomPresenter( client = FakeMatrixClient().apply { givenGetRoomResult( roomId = A_ROOM_ID, @@ -225,10 +225,10 @@ class DefaultLeaveRoomPresenterTest { } } -private fun TestScope.createDefaultLeaveRoomPresenter( +private fun TestScope.createLeaveRoomPresenter( client: MatrixClient = FakeMatrixClient(), roomMembershipObserver: RoomMembershipObserver = RoomMembershipObserver(), -): DefaultLeaveRoomPresenter = DefaultLeaveRoomPresenter( +): LeaveRoomPresenter = LeaveRoomPresenter( client = client, roomMembershipObserver = roomMembershipObserver, dispatchers = testCoroutineDispatchers(false), diff --git a/features/leaveroom/test/src/main/kotlin/io/element/android/features/leaveroom/fake/FakeLeaveRoomPresenter.kt b/features/leaveroom/test/src/main/kotlin/io/element/android/features/leaveroom/fake/FakeLeaveRoomPresenter.kt index 2aa9961c39..6de7c631d9 100644 --- a/features/leaveroom/test/src/main/kotlin/io/element/android/features/leaveroom/fake/FakeLeaveRoomPresenter.kt +++ b/features/leaveroom/test/src/main/kotlin/io/element/android/features/leaveroom/fake/FakeLeaveRoomPresenter.kt @@ -9,10 +9,10 @@ package io.element.android.features.leaveroom.fake import androidx.compose.runtime.Composable import io.element.android.features.leaveroom.api.LeaveRoomEvent -import io.element.android.features.leaveroom.api.LeaveRoomPresenter import io.element.android.features.leaveroom.api.LeaveRoomState +import io.element.android.libraries.architecture.Presenter -class FakeLeaveRoomPresenter : LeaveRoomPresenter { +class FakeLeaveRoomPresenter : Presenter { val events = mutableListOf() private fun handleEvent(event: LeaveRoomEvent) { diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index ee63be7643..eccc8dd9d2 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -19,7 +19,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import im.vector.app.features.analytics.plan.Interaction import io.element.android.features.leaveroom.api.LeaveRoomEvent -import io.element.android.features.leaveroom.api.LeaveRoomPresenter +import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.messages.api.pinned.IsPinnedMessagesFeatureEnabled import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsPresenter import io.element.android.libraries.architecture.Presenter @@ -56,7 +56,7 @@ class RoomDetailsPresenter @Inject constructor( private val featureFlagService: FeatureFlagService, private val notificationSettingsService: NotificationSettingsService, private val roomMembersDetailsPresenterFactory: RoomMemberDetailsPresenter.Factory, - private val leaveRoomPresenter: LeaveRoomPresenter, + private val leaveRoomPresenter: Presenter, private val dispatchers: CoroutineDispatchers, private val analyticsService: AnalyticsService, private val isPinnedMessagesFeatureEnabled: IsPinnedMessagesFeatureEnabled, diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTest.kt index 84f6f5f341..2644bd5073 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/RoomDetailsPresenterTest.kt @@ -16,7 +16,7 @@ import com.google.common.truth.Truth.assertThat import im.vector.app.features.analytics.plan.Interaction import io.element.android.features.createroom.test.FakeStartDMAction import io.element.android.features.leaveroom.api.LeaveRoomEvent -import io.element.android.features.leaveroom.api.LeaveRoomPresenter +import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.fake.FakeLeaveRoomPresenter import io.element.android.features.roomdetails.impl.RoomDetailsEvent import io.element.android.features.roomdetails.impl.RoomDetailsPresenter @@ -25,6 +25,7 @@ import io.element.android.features.roomdetails.impl.RoomDetailsType import io.element.android.features.roomdetails.impl.RoomTopicState import io.element.android.features.roomdetails.impl.members.aRoomMember import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsPresenter +import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.featureflag.test.FakeFeatureFlagService @@ -72,7 +73,7 @@ class RoomDetailsPresenterTest { private fun TestScope.createRoomDetailsPresenter( room: MatrixRoom = aMatrixRoom(), - leaveRoomPresenter: LeaveRoomPresenter = FakeLeaveRoomPresenter(), + leaveRoomPresenter: Presenter = FakeLeaveRoomPresenter(), dispatchers: CoroutineDispatchers = testCoroutineDispatchers(), notificationSettingsService: FakeNotificationSettingsService = FakeNotificationSettingsService(), analyticsService: AnalyticsService = FakeAnalyticsService(), diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index 31a3ea3f01..8b034ad181 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -28,7 +28,7 @@ import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.InviteData import io.element.android.features.leaveroom.api.LeaveRoomEvent -import io.element.android.features.leaveroom.api.LeaveRoomPresenter +import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.logout.api.direct.DirectLogoutState import io.element.android.features.networkmonitor.api.NetworkMonitor import io.element.android.features.networkmonitor.api.NetworkStatus @@ -80,7 +80,7 @@ class RoomListPresenter @Inject constructor( private val client: MatrixClient, private val networkMonitor: NetworkMonitor, private val snackbarDispatcher: SnackbarDispatcher, - private val leaveRoomPresenter: LeaveRoomPresenter, + private val leaveRoomPresenter: Presenter, private val roomListDataSource: RoomListDataSource, private val featureFlagService: FeatureFlagService, private val indicatorService: IndicatorService, diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt index 5c91716c31..259f6a8ed9 100644 --- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTest.kt @@ -16,7 +16,7 @@ import io.element.android.features.invite.api.response.AcceptDeclineInviteEvents import io.element.android.features.invite.api.response.AcceptDeclineInviteState import io.element.android.features.invite.api.response.anAcceptDeclineInviteState import io.element.android.features.leaveroom.api.LeaveRoomEvent -import io.element.android.features.leaveroom.api.LeaveRoomPresenter +import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.fake.FakeLeaveRoomPresenter import io.element.android.features.logout.api.direct.aDirectLogoutState import io.element.android.features.networkmonitor.api.NetworkMonitor @@ -671,7 +671,7 @@ class RoomListPresenterTest { client: MatrixClient = FakeMatrixClient(), networkMonitor: NetworkMonitor = FakeNetworkMonitor(), snackbarDispatcher: SnackbarDispatcher = SnackbarDispatcher(), - leaveRoomPresenter: LeaveRoomPresenter = FakeLeaveRoomPresenter(), + leaveRoomPresenter: Presenter = FakeLeaveRoomPresenter(), lastMessageTimestampFormatter: LastMessageTimestampFormatter = FakeLastMessageTimestampFormatter().apply { givenFormat(A_FORMATTED_DATE) },