From ef97d135cc415be6024d56c019b7da71f28ef583 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 17:29:29 +0200 Subject: [PATCH 01/12] Move AppErrorView to the `api` module so that `:appnav:root` does not have to depend on a `impl` module. --- appnav/build.gradle.kts | 2 +- .../main/kotlin/io/element/android/appnav/root/RootView.kt | 2 +- services/apperror/api/build.gradle.kts | 1 + .../io/element/android/services/apperror/api}/AppErrorView.kt | 4 +--- services/apperror/impl/build.gradle.kts | 4 +--- 5 files changed, 5 insertions(+), 8 deletions(-) rename services/apperror/{impl/src/main/kotlin/io/element/android/services/apperror/impl => api/src/main/kotlin/io/element/android/services/apperror/api}/AppErrorView.kt (86%) diff --git a/appnav/build.gradle.kts b/appnav/build.gradle.kts index ecac391216..d15129aa6c 100644 --- a/appnav/build.gradle.kts +++ b/appnav/build.gradle.kts @@ -51,7 +51,7 @@ dependencies { implementation(projects.features.linknewdevice.api) implementation(projects.features.share.api) - implementation(projects.services.apperror.impl) + implementation(projects.services.apperror.api) implementation(projects.services.appnavstate.api) implementation(projects.services.analytics.api) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt b/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt index 32c8e52084..19aa820433 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/root/RootView.kt @@ -22,7 +22,7 @@ import io.element.android.features.rageshake.api.detection.RageshakeDetectionVie import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.services.apperror.impl.AppErrorView +import io.element.android.services.apperror.api.AppErrorView @Composable fun RootView( diff --git a/services/apperror/api/build.gradle.kts b/services/apperror/api/build.gradle.kts index c0893bd7e8..62d3501655 100644 --- a/services/apperror/api/build.gradle.kts +++ b/services/apperror/api/build.gradle.kts @@ -16,4 +16,5 @@ android { dependencies { implementation(libs.coroutines.core) + implementation(projects.libraries.designsystem) } diff --git a/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/AppErrorView.kt b/services/apperror/api/src/main/kotlin/io/element/android/services/apperror/api/AppErrorView.kt similarity index 86% rename from services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/AppErrorView.kt rename to services/apperror/api/src/main/kotlin/io/element/android/services/apperror/api/AppErrorView.kt index 3794234c79..5a2a5110f5 100644 --- a/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/AppErrorView.kt +++ b/services/apperror/api/src/main/kotlin/io/element/android/services/apperror/api/AppErrorView.kt @@ -6,14 +6,12 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.services.apperror.impl +package io.element.android.services.apperror.api import androidx.compose.runtime.Composable import io.element.android.libraries.designsystem.components.dialogs.ErrorDialog import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight -import io.element.android.services.apperror.api.AppErrorState -import io.element.android.services.apperror.api.aAppErrorState @Composable fun AppErrorView( diff --git a/services/apperror/impl/build.gradle.kts b/services/apperror/impl/build.gradle.kts index b72b54c198..75440dc5a3 100644 --- a/services/apperror/impl/build.gradle.kts +++ b/services/apperror/impl/build.gradle.kts @@ -10,7 +10,7 @@ import extension.testCommonDependencies */ plugins { - id("io.element.android-compose-library") + id("io.element.android-library") } setupDependencyInjection() @@ -22,8 +22,6 @@ android { dependencies { implementation(projects.libraries.core) implementation(projects.libraries.di) - implementation(projects.libraries.designsystem) - implementation(projects.libraries.uiStrings) implementation(projects.services.toolbox.api) implementation(libs.coroutines.core) From 0e85fec41a52280fa71876ebcee8000acd956244 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 17:34:44 +0200 Subject: [PATCH 02/12] Depend on `api` not `impl` module. --- features/call/impl/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/call/impl/build.gradle.kts b/features/call/impl/build.gradle.kts index e77c09e19a..2843e47870 100644 --- a/features/call/impl/build.gradle.kts +++ b/features/call/impl/build.gradle.kts @@ -73,7 +73,7 @@ dependencies { implementation(projects.libraries.core) implementation(projects.libraries.designsystem) implementation(projects.libraries.featureflag.api) - implementation(projects.libraries.matrix.impl) + implementation(projects.libraries.matrix.api) implementation(projects.libraries.matrixmedia.api) implementation(projects.libraries.network) implementation(projects.libraries.preferences.api) From 2a5fc3633d451b532b56161cba06d36a056a8ba8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 17:40:48 +0200 Subject: [PATCH 03/12] Move aCallNotificationData to the tests package of the main module, so that the test module does not have to depend on the impl module. --- .../features/call/impl/notifications}/CallNotificationData.kt | 3 +-- .../features/call/utils/DefaultActiveCallManagerTest.kt | 2 +- features/call/test/build.gradle.kts | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) rename features/call/{test/src/main/kotlin/io/element/android/features/call/test => impl/src/test/kotlin/io/element/android/features/call/impl/notifications}/CallNotificationData.kt (93%) diff --git a/features/call/test/src/main/kotlin/io/element/android/features/call/test/CallNotificationData.kt b/features/call/impl/src/test/kotlin/io/element/android/features/call/impl/notifications/CallNotificationData.kt similarity index 93% rename from features/call/test/src/main/kotlin/io/element/android/features/call/test/CallNotificationData.kt rename to features/call/impl/src/test/kotlin/io/element/android/features/call/impl/notifications/CallNotificationData.kt index 387a77ef8b..1906aba551 100644 --- a/features/call/test/src/main/kotlin/io/element/android/features/call/test/CallNotificationData.kt +++ b/features/call/impl/src/test/kotlin/io/element/android/features/call/impl/notifications/CallNotificationData.kt @@ -6,9 +6,8 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.call.test +package io.element.android.features.call.impl.notifications -import io.element.android.features.call.impl.notifications.CallNotificationData import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId diff --git a/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultActiveCallManagerTest.kt b/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultActiveCallManagerTest.kt index 5650eaa47f..f9f6206ec7 100644 --- a/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultActiveCallManagerTest.kt +++ b/features/call/impl/src/test/kotlin/io/element/android/features/call/utils/DefaultActiveCallManagerTest.kt @@ -15,11 +15,11 @@ import androidx.test.platform.app.InstrumentationRegistry import com.google.common.truth.Truth.assertThat import io.element.android.features.call.api.CallType import io.element.android.features.call.impl.notifications.RingingCallNotificationCreator +import io.element.android.features.call.impl.notifications.aCallNotificationData import io.element.android.features.call.impl.utils.ActiveCall import io.element.android.features.call.impl.utils.CallState import io.element.android.features.call.impl.utils.DefaultActiveCallManager import io.element.android.features.call.impl.utils.DefaultCurrentCallService -import io.element.android.features.call.test.aCallNotificationData import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId diff --git a/features/call/test/build.gradle.kts b/features/call/test/build.gradle.kts index 76fbf9915e..f06c5ed16e 100644 --- a/features/call/test/build.gradle.kts +++ b/features/call/test/build.gradle.kts @@ -20,7 +20,6 @@ dependencies { implementation(projects.libraries.core) api(projects.features.call.api) - implementation(projects.features.call.impl) implementation(projects.libraries.matrix.api) implementation(projects.libraries.matrix.test) implementation(projects.tests.testutils) From ed2b43e0da84dda175f0e3007f96506652ca748b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 17:45:01 +0200 Subject: [PATCH 04/12] Remove useless dependencies. --- features/createroom/impl/build.gradle.kts | 2 -- 1 file changed, 2 deletions(-) diff --git a/features/createroom/impl/build.gradle.kts b/features/createroom/impl/build.gradle.kts index 7201f7dc9c..13a195e940 100644 --- a/features/createroom/impl/build.gradle.kts +++ b/features/createroom/impl/build.gradle.kts @@ -39,7 +39,6 @@ dependencies { implementation(projects.libraries.mediaupload.api) implementation(projects.libraries.permissions.api) implementation(projects.libraries.previewutils) - implementation(projects.libraries.usersearch.impl) implementation(projects.services.analytics.api) implementation(libs.coil.compose) implementation(projects.libraries.featureflag.api) @@ -52,7 +51,6 @@ dependencies { testImplementation(projects.libraries.mediapickers.test) testImplementation(projects.libraries.mediaupload.test) testImplementation(projects.libraries.permissions.test) - testImplementation(projects.libraries.usersearch.test) testImplementation(projects.features.startchat.test) testImplementation(projects.libraries.featureflag.test) } From 54be642597d70aa57ed3d14d2a51371fc598e8d3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 17:46:50 +0200 Subject: [PATCH 05/12] Depend on `api` not `impl` module. --- features/invitepeople/impl/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/invitepeople/impl/build.gradle.kts b/features/invitepeople/impl/build.gradle.kts index e2025405ff..0c3f988659 100644 --- a/features/invitepeople/impl/build.gradle.kts +++ b/features/invitepeople/impl/build.gradle.kts @@ -34,7 +34,7 @@ dependencies { implementation(projects.libraries.designsystem) implementation(projects.libraries.uiStrings) implementation(projects.libraries.androidutils) - implementation(projects.libraries.usersearch.impl) + implementation(projects.libraries.usersearch.api) implementation(libs.coil.compose) implementation(projects.services.apperror.api) api(projects.features.invitepeople.api) From 5ad6ad08527098e06db229ff805e3da9613a2be8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 17:51:03 +0200 Subject: [PATCH 06/12] Depend on `api` not `impl` module. --- features/messages/test/build.gradle.kts | 2 +- ...akeDefaultVoiceMessageComposerPresenterFactory.kt | 12 ++---------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/features/messages/test/build.gradle.kts b/features/messages/test/build.gradle.kts index 29c00ece73..b839f8de06 100644 --- a/features/messages/test/build.gradle.kts +++ b/features/messages/test/build.gradle.kts @@ -26,5 +26,5 @@ dependencies { implementation(projects.libraries.voicerecorder.test) implementation(projects.services.analytics.test) implementation(projects.tests.testutils) - implementation(projects.libraries.mediaupload.impl) + implementation(projects.libraries.mediaupload.api) } diff --git a/features/messages/test/src/main/kotlin/io/element/android/features/messages/test/timeline/voicemessages/composer/FakeDefaultVoiceMessageComposerPresenterFactory.kt b/features/messages/test/src/main/kotlin/io/element/android/features/messages/test/timeline/voicemessages/composer/FakeDefaultVoiceMessageComposerPresenterFactory.kt index 17de179b55..466bfba4fd 100644 --- a/features/messages/test/src/main/kotlin/io/element/android/features/messages/test/timeline/voicemessages/composer/FakeDefaultVoiceMessageComposerPresenterFactory.kt +++ b/features/messages/test/src/main/kotlin/io/element/android/features/messages/test/timeline/voicemessages/composer/FakeDefaultVoiceMessageComposerPresenterFactory.kt @@ -12,13 +12,10 @@ import io.element.android.features.messages.impl.voicemessages.composer.DefaultV import io.element.android.features.messages.impl.voicemessages.composer.VoiceMessageComposerPlayer import io.element.android.features.messages.test.FakeMessageComposerContext import io.element.android.libraries.matrix.api.timeline.Timeline -import io.element.android.libraries.matrix.test.room.FakeJoinedRoom import io.element.android.libraries.mediaplayer.test.FakeAudioFocus import io.element.android.libraries.mediaplayer.test.FakeMediaPlayer import io.element.android.libraries.mediaupload.api.MediaSender -import io.element.android.libraries.mediaupload.impl.DefaultMediaSender -import io.element.android.libraries.mediaupload.test.FakeMediaOptimizationConfigProvider -import io.element.android.libraries.mediaupload.test.FakeMediaPreProcessor +import io.element.android.libraries.mediaupload.test.FakeMediaSender import io.element.android.libraries.permissions.test.FakePermissionsPresenterFactory import io.element.android.libraries.voicerecorder.test.FakeVoiceRecorder import io.element.android.services.analytics.test.FakeAnalyticsService @@ -26,12 +23,7 @@ import kotlinx.coroutines.CoroutineScope class FakeDefaultVoiceMessageComposerPresenterFactory( private val sessionCoroutineScope: CoroutineScope, - private val mediaSender: MediaSender = DefaultMediaSender( - preProcessor = FakeMediaPreProcessor(), - room = FakeJoinedRoom(), - timelineMode = Timeline.Mode.Live, - mediaOptimizationConfigProvider = FakeMediaOptimizationConfigProvider(), - ), + private val mediaSender: MediaSender = FakeMediaSender(), ) : DefaultVoiceMessageComposerPresenter.Factory { override fun create(timelineMode: Timeline.Mode): DefaultVoiceMessageComposerPresenter { return DefaultVoiceMessageComposerPresenter( From d206c7a0504fec45a03567aec9cee3742b2ed2cf Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 17:51:57 +0200 Subject: [PATCH 07/12] Depend on `api` not `impl` module. --- features/migration/impl/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/migration/impl/build.gradle.kts b/features/migration/impl/build.gradle.kts index a37c3be882..1ba0953349 100644 --- a/features/migration/impl/build.gradle.kts +++ b/features/migration/impl/build.gradle.kts @@ -24,7 +24,7 @@ dependencies { implementation(projects.features.migration.api) implementation(projects.libraries.architecture) implementation(projects.libraries.androidutils) - implementation(projects.libraries.preferences.impl) + implementation(projects.libraries.preferences.api) implementation(libs.androidx.datastore.preferences) implementation(projects.features.rageshake.api) implementation(projects.libraries.designsystem) From 5eeaa4ca72faca8a927da0226a89bd4489169b81 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 17:52:42 +0200 Subject: [PATCH 08/12] Depend on `api` not `impl` module. --- features/startchat/impl/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/startchat/impl/build.gradle.kts b/features/startchat/impl/build.gradle.kts index 6ab1a361e9..805dcc742b 100644 --- a/features/startchat/impl/build.gradle.kts +++ b/features/startchat/impl/build.gradle.kts @@ -38,7 +38,7 @@ dependencies { implementation(projects.libraries.mediapickers.api) implementation(projects.libraries.mediaupload.api) implementation(projects.libraries.permissions.api) - implementation(projects.libraries.usersearch.impl) + implementation(projects.libraries.usersearch.api) implementation(projects.services.analytics.api) implementation(libs.coil.compose) implementation(projects.libraries.featureflag.api) From 035e52710183fc76466a7b480afc568c9dc79493 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 18:04:46 +0200 Subject: [PATCH 09/12] Depend on `api` not `impl` module. --- libraries/matrix/test/build.gradle.kts | 1 - .../libraries/matrix/test/mxc/FakeMxcTools.kt | 10 +++++++--- .../impl/DefaultVoiceMessageMediaRepoTest.kt | 14 +++++++++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/libraries/matrix/test/build.gradle.kts b/libraries/matrix/test/build.gradle.kts index ccb1a37a25..63836d857a 100644 --- a/libraries/matrix/test/build.gradle.kts +++ b/libraries/matrix/test/build.gradle.kts @@ -19,7 +19,6 @@ dependencies { api(projects.libraries.matrix.api) api(libs.coroutines.core) implementation(libs.coroutines.test) - implementation(projects.libraries.matrix.impl) implementation(projects.services.analytics.api) implementation(projects.tests.testutils) implementation(libs.kotlinx.collections.immutable) diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/mxc/FakeMxcTools.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/mxc/FakeMxcTools.kt index c348cd351c..d49a1cc22d 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/mxc/FakeMxcTools.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/mxc/FakeMxcTools.kt @@ -8,8 +8,12 @@ package io.element.android.libraries.matrix.test.mxc import io.element.android.libraries.matrix.api.mxc.MxcTools -import io.element.android.libraries.matrix.impl.mxc.DefaultMxcTools +import io.element.android.tests.testutils.lambda.lambdaError class FakeMxcTools( - private val delegate: MxcTools = DefaultMxcTools() -) : MxcTools by delegate + private val mxcUri2FilePathResult: (String) -> String? = { lambdaError() } +) : MxcTools { + override fun mxcUri2FilePath(mxcUri: String): String? { + return mxcUri2FilePathResult(mxcUri) + } +} diff --git a/libraries/voiceplayer/impl/src/test/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessageMediaRepoTest.kt b/libraries/voiceplayer/impl/src/test/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessageMediaRepoTest.kt index 5df259fb5b..fad530a3e8 100644 --- a/libraries/voiceplayer/impl/src/test/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessageMediaRepoTest.kt +++ b/libraries/voiceplayer/impl/src/test/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessageMediaRepoTest.kt @@ -32,6 +32,9 @@ class DefaultVoiceMessageMediaRepoTest { val repo = createDefaultVoiceMessageMediaRepo( temporaryFolder = temporaryFolder, matrixMediaLoader = matrixMediaLoader, + mxcUri2FilePathResult = { + "matrix.org/1234567890abcdefg" + }, ) repo.getMediaFile().let { result -> @@ -76,6 +79,9 @@ class DefaultVoiceMessageMediaRepoTest { val repo = createDefaultVoiceMessageMediaRepo( temporaryFolder = temporaryFolder, matrixMediaLoader = matrixMediaLoader, + mxcUri2FilePathResult = { + "matrix.org/1234567890abcdefg" + }, ) repo.getMediaFile().let { result -> @@ -98,6 +104,9 @@ class DefaultVoiceMessageMediaRepoTest { val repo = createDefaultVoiceMessageMediaRepo( temporaryFolder = temporaryFolder, matrixMediaLoader = matrixMediaLoader, + mxcUri2FilePathResult = { + "matrix.org/1234567890abcdefg" + }, ) repo.getMediaFile().let { result -> @@ -128,10 +137,13 @@ class DefaultVoiceMessageMediaRepoTest { private fun createDefaultVoiceMessageMediaRepo( temporaryFolder: TemporaryFolder, matrixMediaLoader: MatrixMediaLoader = FakeMatrixMediaLoader(), + mxcUri2FilePathResult: (String) -> String? = { null }, mxcUri: String = MXC_URI, ) = DefaultVoiceMessageMediaRepo( cacheDir = temporaryFolder.root, - mxcTools = FakeMxcTools(), + mxcTools = FakeMxcTools( + mxcUri2FilePathResult = mxcUri2FilePathResult, + ), matrixMediaLoader = matrixMediaLoader, mediaSource = MediaSource( url = mxcUri, From df73b4427912903592ec56c194e986c1147a9b46 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 8 Apr 2026 18:10:32 +0200 Subject: [PATCH 10/12] Depend on `api` not `impl` module. --- .../impl/notifications/DefaultNotifiableEventResolverTest.kt | 1 - .../DefaultOnMissedCallNotificationHandlerTest.kt | 1 - .../impl}/notifications/FakeCallNotificationEventResolver.kt | 3 +-- .../android/libraries/push/impl/push/DefaultPushHandlerTest.kt | 2 +- .../workmanager/FakeSyncPendingNotificationsRequestBuilder.kt | 3 +-- libraries/push/test/build.gradle.kts | 1 - 6 files changed, 3 insertions(+), 8 deletions(-) rename libraries/push/{test/src/main/kotlin/io/element/android/libraries/push/test => impl/src/test/kotlin/io/element/android/libraries/push/impl}/notifications/FakeCallNotificationEventResolver.kt (87%) rename libraries/push/{test/src/main/kotlin/io/element/android/libraries/push/test => impl/src/test/kotlin/io/element/android/libraries/push/impl}/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt (78%) diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt index 63b903a3f7..e732c350b2 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolverTest.kt @@ -56,7 +56,6 @@ import io.element.android.libraries.push.impl.notifications.model.FallbackNotifi import io.element.android.libraries.push.impl.notifications.model.InviteNotifiableEvent import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.libraries.push.impl.notifications.model.ResolvedPushEvent -import io.element.android.libraries.push.test.notifications.FakeCallNotificationEventResolver import io.element.android.services.toolbox.impl.strings.AndroidStringProvider import io.element.android.services.toolbox.test.systemclock.A_FAKE_TIMESTAMP import io.element.android.services.toolbox.test.systemclock.FakeSystemClock diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandlerTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandlerTest.kt index 9bba1c32d3..e9f6b76b7a 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandlerTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandlerTest.kt @@ -18,7 +18,6 @@ import io.element.android.libraries.matrix.test.notification.FakeNotificationSer import io.element.android.libraries.matrix.test.notification.aNotificationData import io.element.android.libraries.push.impl.notifications.fake.FakeNotificationDataFactory import io.element.android.libraries.push.impl.notifications.fixtures.aNotifiableMessageEvent -import io.element.android.libraries.push.test.notifications.FakeCallNotificationEventResolver import io.element.android.tests.testutils.lambda.lambdaRecorder import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.runCurrent diff --git a/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/notifications/FakeCallNotificationEventResolver.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/FakeCallNotificationEventResolver.kt similarity index 87% rename from libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/notifications/FakeCallNotificationEventResolver.kt rename to libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/FakeCallNotificationEventResolver.kt index f923d0c9fe..a1049683f5 100644 --- a/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/notifications/FakeCallNotificationEventResolver.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/notifications/FakeCallNotificationEventResolver.kt @@ -6,11 +6,10 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.libraries.push.test.notifications +package io.element.android.libraries.push.impl.notifications import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.notification.NotificationData -import io.element.android.libraries.push.impl.notifications.CallNotificationEventResolver import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent import io.element.android.tests.testutils.lambda.lambdaError diff --git a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt index cc6e4674f9..a16568d400 100644 --- a/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandlerTest.kt @@ -26,8 +26,8 @@ import io.element.android.libraries.push.impl.history.PushHistoryService import io.element.android.libraries.push.impl.notifications.FakeNotificationResultProcessor import io.element.android.libraries.push.impl.test.DefaultTestPush import io.element.android.libraries.push.impl.troubleshoot.DiagnosticPushHandler +import io.element.android.libraries.push.impl.workmanager.FakeSyncPendingNotificationsRequestBuilder import io.element.android.libraries.push.impl.workmanager.SyncPendingNotificationsRequestBuilder -import io.element.android.libraries.push.test.workmanager.FakeSyncPendingNotificationsRequestBuilder import io.element.android.libraries.pushproviders.api.PushData import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStore diff --git a/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt similarity index 78% rename from libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt rename to libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt index ef0e38991e..f2da936b87 100644 --- a/libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt +++ b/libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/workmanager/FakeSyncPendingNotificationsRequestBuilder.kt @@ -5,9 +5,8 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.libraries.push.test.workmanager +package io.element.android.libraries.push.impl.workmanager -import io.element.android.libraries.push.impl.workmanager.SyncPendingNotificationsRequestBuilder import io.element.android.libraries.workmanager.api.WorkManagerRequestWrapper class FakeSyncPendingNotificationsRequestBuilder( diff --git a/libraries/push/test/build.gradle.kts b/libraries/push/test/build.gradle.kts index 475d4a4ae5..9dedeb3996 100644 --- a/libraries/push/test/build.gradle.kts +++ b/libraries/push/test/build.gradle.kts @@ -18,7 +18,6 @@ dependencies { api(projects.libraries.push.api) api(projects.libraries.pushproviders.api) implementation(projects.libraries.designsystem) - implementation(projects.libraries.push.impl) implementation(projects.libraries.matrix.api) implementation(projects.libraries.matrixui) implementation(projects.libraries.workmanager.api) From 5c5a5ad7fc384b87ef018daab31c1e11deea061c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 9 Apr 2026 09:32:52 +0200 Subject: [PATCH 11/12] Fix tests --- appnav/build.gradle.kts | 3 +- .../appnav/JoinedRoomLoadedFlowNodeTest.kt | 8 ++--- .../android/appnav/RootPresenterTest.kt | 21 ++++++----- .../appnavstate/test/FakeActiveRoomsHolder.kt | 36 +++++++++++++++++++ 4 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 services/appnavstate/test/src/main/kotlin/io/element/android/services/appnavstate/test/FakeActiveRoomsHolder.kt diff --git a/appnav/build.gradle.kts b/appnav/build.gradle.kts index d15129aa6c..24a0355b3f 100644 --- a/appnav/build.gradle.kts +++ b/appnav/build.gradle.kts @@ -67,8 +67,7 @@ dependencies { testImplementation(projects.features.messages.test) testImplementation(projects.features.networkmonitor.test) testImplementation(projects.features.rageshake.test) - testImplementation(projects.services.appnavstate.impl) + testImplementation(projects.services.apperror.test) testImplementation(projects.services.appnavstate.test) testImplementation(projects.services.analytics.test) - testImplementation(projects.services.toolbox.test) } diff --git a/appnav/src/test/kotlin/io/element/android/appnav/JoinedRoomLoadedFlowNodeTest.kt b/appnav/src/test/kotlin/io/element/android/appnav/JoinedRoomLoadedFlowNodeTest.kt index 8d514a2c0f..6dffda9e42 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/JoinedRoomLoadedFlowNodeTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/JoinedRoomLoadedFlowNodeTest.kt @@ -43,7 +43,7 @@ import io.element.android.services.analytics.api.watchers.AnalyticsSendMessageWa import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.services.analytics.test.watchers.FakeAnalyticsSendMessageWatcher import io.element.android.services.appnavstate.api.ActiveRoomsHolder -import io.element.android.services.appnavstate.impl.DefaultActiveRoomsHolder +import io.element.android.services.appnavstate.test.FakeActiveRoomsHolder import io.element.android.services.appnavstate.test.FakeAppNavigationStateService import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest @@ -128,7 +128,7 @@ class JoinedRoomLoadedFlowNodeTest { roomDetailsEntryPoint: RoomDetailsEntryPoint = FakeRoomDetailsEntryPoint(), spaceEntryPoint: SpaceEntryPoint = FakeSpaceEntryPoint(), forwardEntryPoint: ForwardEntryPoint = FakeForwardEntryPoint(), - activeRoomsHolder: ActiveRoomsHolder = DefaultActiveRoomsHolder(), + activeRoomsHolder: ActiveRoomsHolder = FakeActiveRoomsHolder(), matrixClient: FakeMatrixClient = FakeMatrixClient(), ) = JoinedRoomLoadedFlowNode( buildContext = BuildContext.root(savedStateMap = null), @@ -213,7 +213,7 @@ class JoinedRoomLoadedFlowNodeTest { val fakeMessagesEntryPoint = FakeMessagesEntryPoint() val fakeRoomDetailsEntryPoint = FakeRoomDetailsEntryPoint() val inputs = JoinedRoomLoadedFlowNode.Inputs(room, RoomNavigationTarget.Root()) - val activeRoomsHolder = DefaultActiveRoomsHolder() + val activeRoomsHolder = FakeActiveRoomsHolder() val roomFlowNode = createJoinedRoomLoadedFlowNode( plugins = listOf(inputs, FakeJoinedRoomLoadedFlowNodeCallback()), messagesEntryPoint = fakeMessagesEntryPoint, @@ -236,7 +236,7 @@ class JoinedRoomLoadedFlowNodeTest { val fakeMessagesEntryPoint = FakeMessagesEntryPoint() val fakeRoomDetailsEntryPoint = FakeRoomDetailsEntryPoint() val inputs = JoinedRoomLoadedFlowNode.Inputs(room, RoomNavigationTarget.Root()) - val activeRoomsHolder = DefaultActiveRoomsHolder().apply { + val activeRoomsHolder = FakeActiveRoomsHolder().apply { addRoom(room) } val roomFlowNode = createJoinedRoomLoadedFlowNode( 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 73d55135fb..9ba98a3f72 100644 --- a/appnav/src/test/kotlin/io/element/android/appnav/RootPresenterTest.kt +++ b/appnav/src/test/kotlin/io/element/android/appnav/RootPresenterTest.kt @@ -19,8 +19,7 @@ import io.element.android.libraries.matrix.test.FakeSdkMetadata import io.element.android.services.analytics.test.FakeAnalyticsService import io.element.android.services.apperror.api.AppErrorState import io.element.android.services.apperror.api.AppErrorStateService -import io.element.android.services.apperror.impl.DefaultAppErrorStateService -import io.element.android.services.toolbox.test.strings.FakeStringProvider +import io.element.android.services.apperror.test.FakeAppErrorStateService import io.element.android.tests.testutils.WarmUpRule import kotlinx.coroutines.test.runTest import org.junit.Rule @@ -44,10 +43,16 @@ class RootPresenterTest { @Test fun `present - passes app error state`() = runTest { val presenter = createRootPresenter( - appErrorService = DefaultAppErrorStateService( - stringProvider = FakeStringProvider(), - ).apply { - showError("Bad news", "Something bad happened") + appErrorService = FakeAppErrorStateService().apply { + setAppErrorState( + AppErrorState.Error( + title = "Bad news", + body = "Something bad happened", + dismiss = { + setAppErrorState(AppErrorState.NoError) + } + ) + ) } ) moleculeFlow(RecompositionMode.Immediate) { @@ -65,9 +70,7 @@ class RootPresenterTest { } private fun createRootPresenter( - appErrorService: AppErrorStateService = DefaultAppErrorStateService( - stringProvider = FakeStringProvider(), - ), + appErrorService: AppErrorStateService = FakeAppErrorStateService(), ): RootPresenter { return RootPresenter( crashDetectionPresenter = { aCrashDetectionState() }, diff --git a/services/appnavstate/test/src/main/kotlin/io/element/android/services/appnavstate/test/FakeActiveRoomsHolder.kt b/services/appnavstate/test/src/main/kotlin/io/element/android/services/appnavstate/test/FakeActiveRoomsHolder.kt new file mode 100644 index 0000000000..7561932fc2 --- /dev/null +++ b/services/appnavstate/test/src/main/kotlin/io/element/android/services/appnavstate/test/FakeActiveRoomsHolder.kt @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2026 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. + * Please see LICENSE files in the repository root for full details. + */ + +package io.element.android.services.appnavstate.test + +import io.element.android.libraries.matrix.api.core.RoomId +import io.element.android.libraries.matrix.api.core.SessionId +import io.element.android.libraries.matrix.api.room.JoinedRoom +import io.element.android.services.appnavstate.api.ActiveRoomsHolder + +class FakeActiveRoomsHolder : ActiveRoomsHolder { + private var room: JoinedRoom? = null + + override fun addRoom(room: JoinedRoom) { + this.room = room + } + + override fun getActiveRoom(sessionId: SessionId): JoinedRoom? { + return room + } + + override fun getActiveRoomMatching(sessionId: SessionId, roomId: RoomId): JoinedRoom? { + return null + } + + override fun removeRoom(sessionId: SessionId, roomId: RoomId) { + room = null + } + + override fun clear(sessionId: SessionId) { + } +} From f037603928114b19775a1342ff65e1ad5cc13e27 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Thu, 9 Apr 2026 10:26:40 +0000 Subject: [PATCH 12/12] Update screenshots --- ...y_0_en.png => services.apperror.api_AppErrorView_Day_0_en.png} | 0 ...0_en.png => services.apperror.api_AppErrorView_Night_0_en.png} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tests/uitests/src/test/snapshots/images/{services.apperror.impl_AppErrorView_Day_0_en.png => services.apperror.api_AppErrorView_Day_0_en.png} (100%) rename tests/uitests/src/test/snapshots/images/{services.apperror.impl_AppErrorView_Night_0_en.png => services.apperror.api_AppErrorView_Night_0_en.png} (100%) diff --git a/tests/uitests/src/test/snapshots/images/services.apperror.impl_AppErrorView_Day_0_en.png b/tests/uitests/src/test/snapshots/images/services.apperror.api_AppErrorView_Day_0_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/services.apperror.impl_AppErrorView_Day_0_en.png rename to tests/uitests/src/test/snapshots/images/services.apperror.api_AppErrorView_Day_0_en.png diff --git a/tests/uitests/src/test/snapshots/images/services.apperror.impl_AppErrorView_Night_0_en.png b/tests/uitests/src/test/snapshots/images/services.apperror.api_AppErrorView_Night_0_en.png similarity index 100% rename from tests/uitests/src/test/snapshots/images/services.apperror.impl_AppErrorView_Night_0_en.png rename to tests/uitests/src/test/snapshots/images/services.apperror.api_AppErrorView_Night_0_en.png