From c709b8d76ea010769b08d1c13fb09f4a1dd9aff2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 7 Oct 2024 08:43:11 +0200 Subject: [PATCH] Remove dependencies to other presenters from RootPresenter --- .../android/appnav/root/RootPresenter.kt | 8 ++--- .../android/appnav/RootPresenterTest.kt | 35 +++---------------- .../rageshake/impl/di/RageshakeModule.kt | 28 +++++++++++++++ 3 files changed, 37 insertions(+), 34 deletions(-) create mode 100644 features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeModule.kt diff --git a/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt index 01c1164741..f7a0c279f9 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt @@ -12,8 +12,8 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import im.vector.app.features.analytics.plan.SuperProperties -import io.element.android.features.rageshake.api.crash.CrashDetectionPresenter -import io.element.android.features.rageshake.api.detection.RageshakeDetectionPresenter +import io.element.android.features.rageshake.api.crash.CrashDetectionState +import io.element.android.features.rageshake.api.detection.RageshakeDetectionState import io.element.android.features.share.api.ShareService import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.SdkMetadata @@ -22,8 +22,8 @@ import io.element.android.services.apperror.api.AppErrorStateService import javax.inject.Inject class RootPresenter @Inject constructor( - private val crashDetectionPresenter: CrashDetectionPresenter, - private val rageshakeDetectionPresenter: RageshakeDetectionPresenter, + private val crashDetectionPresenter: Presenter, + private val rageshakeDetectionPresenter: Presenter, private val appErrorStateService: AppErrorStateService, private val analyticsService: AnalyticsService, private val shareService: ShareService, diff --git a/appnav/src/test/kotlin/io/element/android/appnav/RootPresenterTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/RootPresenterTest.kt index 619f56e51d..2312c2dbb0 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/RootPresenterTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/RootPresenterTest.kt @@ -12,17 +12,11 @@ import app.cash.molecule.moleculeFlow import app.cash.turbine.test import com.google.common.truth.Truth.assertThat import io.element.android.appnav.root.RootPresenter -import io.element.android.features.rageshake.impl.crash.DefaultCrashDetectionPresenter -import io.element.android.features.rageshake.impl.detection.DefaultRageshakeDetectionPresenter -import io.element.android.features.rageshake.impl.preferences.DefaultRageshakePreferencesPresenter -import io.element.android.features.rageshake.test.crash.FakeCrashDataStore -import io.element.android.features.rageshake.test.rageshake.FakeRageShake -import io.element.android.features.rageshake.test.rageshake.FakeRageshakeDataStore -import io.element.android.features.rageshake.test.screenshot.FakeScreenshotHolder +import io.element.android.features.rageshake.api.crash.aCrashDetectionState +import io.element.android.features.rageshake.api.detection.aRageshakeDetectionState import io.element.android.features.share.api.ShareService import io.element.android.features.share.test.FakeShareService import io.element.android.libraries.matrix.test.FakeSdkMetadata -import io.element.android.libraries.matrix.test.core.aBuildMeta import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.services.apperror.api.AppErrorState import io.element.android.services.apperror.api.AppErrorStateService @@ -44,7 +38,6 @@ class RootPresenterTest { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - skipItems(1) val initialState = awaitItem() assertThat(initialState.crashDetectionState.crashDetected).isFalse() } @@ -61,7 +54,7 @@ class RootPresenterTest { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - skipItems(2) + skipItems(1) lambda.assertions().isCalledOnce() } } @@ -76,8 +69,6 @@ class RootPresenterTest { moleculeFlow(RecompositionMode.Immediate) { presenter.present() }.test { - skipItems(1) - val initialState = awaitItem() assertThat(initialState.errorState).isInstanceOf(AppErrorState.Error::class.java) val initialErrorState = initialState.errorState as AppErrorState.Error @@ -93,25 +84,9 @@ class RootPresenterTest { appErrorService: AppErrorStateService = DefaultAppErrorStateService(), shareService: ShareService = FakeShareService {}, ): RootPresenter { - val crashDataStore = FakeCrashDataStore() - val rageshakeDataStore = FakeRageshakeDataStore() - val rageshake = FakeRageShake() - val screenshotHolder = FakeScreenshotHolder() - val crashDetectionPresenter = DefaultCrashDetectionPresenter( - buildMeta = aBuildMeta(), - crashDataStore = crashDataStore - ) - val rageshakeDetectionPresenter = DefaultRageshakeDetectionPresenter( - screenshotHolder = screenshotHolder, - rageShake = rageshake, - preferencesPresenter = DefaultRageshakePreferencesPresenter( - rageshake = rageshake, - rageshakeDataStore = rageshakeDataStore, - ) - ) return RootPresenter( - crashDetectionPresenter = crashDetectionPresenter, - rageshakeDetectionPresenter = rageshakeDetectionPresenter, + crashDetectionPresenter = { aCrashDetectionState() }, + rageshakeDetectionPresenter = { aRageshakeDetectionState() }, appErrorStateService = appErrorService, analyticsService = FakeAnalyticsService(), shareService = shareService, diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeModule.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeModule.kt new file mode 100644 index 0000000000..bc74cd542b --- /dev/null +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeModule.kt @@ -0,0 +1,28 @@ +/* + * 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.rageshake.impl.di + +import com.squareup.anvil.annotations.ContributesTo +import dagger.Binds +import dagger.Module +import io.element.android.features.rageshake.api.crash.CrashDetectionPresenter +import io.element.android.features.rageshake.api.crash.CrashDetectionState +import io.element.android.features.rageshake.api.detection.RageshakeDetectionPresenter +import io.element.android.features.rageshake.api.detection.RageshakeDetectionState +import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.di.AppScope + +@ContributesTo(AppScope::class) +@Module +interface RageshakeModule { + @Binds + fun bindRageshakeDetectionPresenter(presenter: RageshakeDetectionPresenter): Presenter + + @Binds + fun bindCrashDetectionPresenter(presenter: CrashDetectionPresenter): Presenter +}