diff --git a/annotations/src/main/kotlin/io/element/android/annotations/ContributesNode.kt b/annotations/src/main/kotlin/io/element/android/annotations/ContributesNode.kt index 632bdc3e81..8091206cbd 100644 --- a/annotations/src/main/kotlin/io/element/android/annotations/ContributesNode.kt +++ b/annotations/src/main/kotlin/io/element/android/annotations/ContributesNode.kt @@ -14,16 +14,16 @@ import kotlin.reflect.KClass * Adds Node to the specified component graph. * Equivalent to the following declaration: * + * ``` * @BindingContainer * @ContributesTo(Scope::class) - * abstract class YourNodeModule { - - * @Binds - * @IntoMap - * @NodeKey(YourNode::class) - * abstract fun bindYourNodeFactory(factory: YourNode.Factory): AssistedNodeFactory<*> - *} - + * interface YourNodeBindingContainer { + * @Binds + * @IntoMap + * @NodeKey(YourNode::class) + * fun bindYourNodeAssistedFactory(factory: YourNodeAssistedFactory): AssistedNodeFactory<*> + * } + * ``` */ @Target(AnnotationTarget.CLASS) annotation class ContributesNode( diff --git a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindingContainer.kt similarity index 97% rename from app/src/main/kotlin/io/element/android/x/di/AppModule.kt rename to app/src/main/kotlin/io/element/android/x/di/AppBindingContainer.kt index 39c70e35d8..3f8e94d8ef 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppBindingContainer.kt @@ -38,7 +38,7 @@ import java.io.File @BindingContainer @ContributesTo(AppScope::class) -object AppModule { +object AppBindingContainer { @Provides @BaseDirectory fun providesBaseDirectory(@ApplicationContext context: Context): File { @@ -111,7 +111,7 @@ object AppModule { @Provides @SingleIn(AppScope::class) - fun provideSnackbarDispatcher(): SnackbarDispatcher { + fun providesSnackbarDispatcher(): SnackbarDispatcher { return SnackbarDispatcher() } } diff --git a/codegen/src/main/kotlin/io/element/android/codegen/ContributesNodeProcessor.kt b/codegen/src/main/kotlin/io/element/android/codegen/ContributesNodeProcessor.kt index 8b537a53fe..3e6c05ad01 100644 --- a/codegen/src/main/kotlin/io/element/android/codegen/ContributesNodeProcessor.kt +++ b/codegen/src/main/kotlin/io/element/android/codegen/ContributesNodeProcessor.kt @@ -61,32 +61,32 @@ class ContributesNodeProcessor( if (config.enableLogging) { logger.warn("Processing ${ksClass.qualifiedName?.asString()}") } - generateModule(ksClass) + generateBindingContainer(ksClass) generateFactory(ksClass) } return invalidSymbols } - private fun generateModule(ksClass: KSClassDeclaration) { + private fun generateBindingContainer(ksClass: KSClassDeclaration) { val annotation = ksClass.annotations.find { it.shortName.asString() == "ContributesNode" }!! val scope = annotation.arguments.find { it.name?.asString() == "scope" }!!.value as KSType - val modulePackage = ksClass.packageName.asString() - val moduleClassName = "${ksClass.simpleName.asString()}_Module" + val bindingContainerPackage = ksClass.packageName.asString() + val bindingContainerClassName = "${ksClass.simpleName.asString()}BindingContainer" val nodeClassName = ClassName.bestGuess(ksClass.qualifiedName!!.asString()) val content = FileSpec.builder( - packageName = modulePackage, - fileName = moduleClassName, + packageName = bindingContainerPackage, + fileName = bindingContainerClassName, ) .addType( - TypeSpec.interfaceBuilder(moduleClassName) + TypeSpec.interfaceBuilder(bindingContainerClassName) .addAnnotation(AnnotationSpec.builder(Origin::class).addMember(CLASS_PLACEHOLDER, nodeClassName).build()) .addAnnotation(BindingContainer::class) .addAnnotation(AnnotationSpec.builder(ContributesTo::class).addMember(CLASS_PLACEHOLDER, scope.toTypeName()).build()) .addFunction( - FunSpec.builder("bind${ksClass.simpleName.asString()}Factory") + FunSpec.builder("bind${ksClass.simpleName.asString()}AssistedFactory") .addModifiers(KModifier.ABSTRACT) - .addParameter("factory", ClassName(modulePackage, "${ksClass.simpleName.asString()}_AssistedFactory")) + .addParameter("factory", ClassName(bindingContainerPackage, "${ksClass.simpleName.asString()}AssistedFactory")) .returns(ClassName.bestGuess(assistedNodeFactoryFqName.asString()).parameterizedBy(STAR)) .addAnnotation(Binds::class) .addAnnotation(IntoMap::class) @@ -114,7 +114,7 @@ class ContributesNodeProcessor( @OptIn(KspExperimental::class) private fun generateFactory(ksClass: KSClassDeclaration) { val generatedPackage = ksClass.packageName.asString() - val assistedFactoryClassName = "${ksClass.simpleName.asString()}_AssistedFactory" + val assistedFactoryClassName = "${ksClass.simpleName.asString()}AssistedFactory" val constructor = ksClass.getConstructors().first { it.parameters.isNotEmpty() } val assistedParameters = constructor.parameters.filter { it.isAnnotationPresent(Assisted::class) } if (assistedParameters.size != 2) { diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/di/AnalyticsModule.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/di/AnalyticsBindingContainer.kt similarity index 95% rename from features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/di/AnalyticsModule.kt rename to features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/di/AnalyticsBindingContainer.kt index 32a3d5826a..a4c2c68670 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/di/AnalyticsModule.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/di/AnalyticsBindingContainer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.Presenter @ContributesTo(AppScope::class) @BindingContainer -interface AnalyticsModule { +interface AnalyticsBindingContainer { @Binds fun bindAnalyticsPreferencesPresenter(presenter: AnalyticsPreferencesPresenter): Presenter } diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PictureInPicturePresenter.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PictureInPicturePresenter.kt index aeb507f6ec..274a80cc26 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PictureInPicturePresenter.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PictureInPicturePresenter.kt @@ -60,7 +60,9 @@ class PictureInPicturePresenter( } is PictureInPictureEvent.SetPipOrientation -> { Timber.tag(loggerTag.value).d("onOrientationChange: ${event.orientation}") - pipView?.setPipOrientation(event.orientation) + if (isPipSupported) { + pipView?.setPipOrientation(event.orientation) + } } } } diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipView.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipView.kt index aa1ab79dd0..54b8d77601 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipView.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipView.kt @@ -8,9 +8,15 @@ package io.element.android.features.call.impl.pip +import android.os.Build +import androidx.annotation.RequiresApi + interface PipView { + @RequiresApi(Build.VERSION_CODES.O) fun setPipOrientation(orientation: Int?) + @RequiresApi(Build.VERSION_CODES.O) fun setPipParams() + @RequiresApi(Build.VERSION_CODES.O) fun enterPipMode(): Boolean fun hangUp() } diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt index 5ed9e29fe2..4a6b8f1c05 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/ElementCallActivity.kt @@ -202,7 +202,9 @@ class ElementCallActivity : } DisposableEffect(Unit) { val onPictureInPictureModeChangedListener = Consumer { _: PictureInPictureModeChangedInfo -> - setPipParams() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + setPipParams() + } pipEventSink(PictureInPictureEvent.OnPictureInPictureModeChanged(isInPictureInPictureMode)) if (!isInPictureInPictureMode && !lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) { Timber.tag(loggerTag.value).d("Exiting PiP mode: Hangup the call") @@ -300,6 +302,7 @@ class ElementCallActivity : } } + @RequiresApi(Build.VERSION_CODES.O) override fun setPipOrientation(orientation: Int?) { currentPipOrientation = orientation setPictureInPictureParams(getPictureInPictureParams()) diff --git a/features/contentscanner/impl/src/main/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerModule.kt b/features/contentscanner/impl/src/main/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerBindingContainer.kt similarity index 97% rename from features/contentscanner/impl/src/main/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerModule.kt rename to features/contentscanner/impl/src/main/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerBindingContainer.kt index 9446a603b2..8c25d8bf6a 100644 --- a/features/contentscanner/impl/src/main/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerModule.kt +++ b/features/contentscanner/impl/src/main/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerBindingContainer.kt @@ -21,7 +21,7 @@ import kotlinx.coroutines.CoroutineScope @BindingContainer @ContributesTo(RoomScope::class) -object ContentScannerModule { +object ContentScannerBindingContainer { @Provides @SingleIn(RoomScope::class) fun providesContentScannerService( diff --git a/features/contentscanner/impl/src/test/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerModuleTest.kt b/features/contentscanner/impl/src/test/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerBindingContainerTest.kt similarity index 77% rename from features/contentscanner/impl/src/test/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerModuleTest.kt rename to features/contentscanner/impl/src/test/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerBindingContainerTest.kt index 8c3834d696..858a21df6c 100644 --- a/features/contentscanner/impl/src/test/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerModuleTest.kt +++ b/features/contentscanner/impl/src/test/kotlin/io/element/android/features/contentscanner/impl/di/ContentScannerBindingContainerTest.kt @@ -15,16 +15,16 @@ import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.coroutines.test.runTest import org.junit.Test -class ContentScannerModuleTest { +class ContentScannerBindingContainerTest { @Test - fun `ContentScannerModule provides NoopContentScannerService when ContentScanner is null`() = runTest { + fun `ContentScannerBindingContainer provides NoopContentScannerService when ContentScanner is null`() = runTest { // Given val contentScanner: ContentScanner? = null val sessionCoroutineScope = backgroundScope val coroutineDispatchers = testCoroutineDispatchers() // When - val contentScannerService = ContentScannerModule.providesContentScannerService( + val contentScannerService = ContentScannerBindingContainer.providesContentScannerService( contentScanner = contentScanner, coroutineScope = sessionCoroutineScope, coroutineDispatchers = coroutineDispatchers, @@ -35,14 +35,14 @@ class ContentScannerModuleTest { } @Test - fun `ContentScannerModule provides DefaultContentScannerService when ContentScanner is not null`() = runTest { + fun `ContentScannerBindingContainer provides DefaultContentScannerService when ContentScanner is not null`() = runTest { // Given val contentScanner: ContentScanner? = FakeContentScanner() val sessionCoroutineScope = backgroundScope val coroutineDispatchers = testCoroutineDispatchers() // When - val contentScannerService = ContentScannerModule.providesContentScannerService( + val contentScannerService = ContentScannerBindingContainer.providesContentScannerService( contentScanner = contentScanner, coroutineScope = sessionCoroutineScope, coroutineDispatchers = coroutineDispatchers, diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueModule.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueBindingContainer.kt similarity index 82% rename from features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueModule.kt rename to features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueBindingContainer.kt index 52f7a43bde..3ba42f687f 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueModule.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueBindingContainer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.di.SessionScope @ContributesTo(SessionScope::class) @BindingContainer -interface FtueModule { +interface FtueBindingContainer { @Binds - fun bindChooseSelfVerificationMethodPresenter(presenter: ChooseSelfVerificationModePresenter): Presenter + fun bindChooseSelfVerificationModePresenter(presenter: ChooseSelfVerificationModePresenter): Presenter } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/HomeSpacesModule.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/HomeSpacesBindingContainer.kt similarity index 95% rename from features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/HomeSpacesModule.kt rename to features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/HomeSpacesBindingContainer.kt index 5e2212375d..989a558718 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/HomeSpacesModule.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/HomeSpacesBindingContainer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.di.SessionScope @BindingContainer @ContributesTo(SessionScope::class) -interface HomeSpacesModule { +interface HomeSpacesBindingContainer { @Binds fun bindHomeSpacesPresenter(presenter: HomeSpacesPresenter): Presenter } diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/RoomListModule.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/RoomListBindingContainer.kt similarity index 86% rename from features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/RoomListModule.kt rename to features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/RoomListBindingContainer.kt index 6b744ca4df..b275559206 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/RoomListModule.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/RoomListBindingContainer.kt @@ -26,15 +26,15 @@ import io.element.android.libraries.di.SessionScope @ContributesTo(SessionScope::class) @BindingContainer -interface RoomListModule { +interface RoomListBindingContainer { @Binds fun bindRoomListPresenter(presenter: RoomListPresenter): Presenter @Binds - fun bindSearchPresenter(presenter: RoomListSearchPresenter): Presenter + fun bindRoomListSearchPresenter(presenter: RoomListSearchPresenter): Presenter @Binds - fun bindFiltersPresenter(presenter: RoomListFiltersPresenter): Presenter + fun bindRoomListFiltersPresenter(presenter: RoomListFiltersPresenter): Presenter @Binds fun bindSpaceFiltersPresenter(presenter: SpaceFiltersPresenter): Presenter diff --git a/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/search/GlobalSearchPresenterTest.kt b/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/search/GlobalSearchPresenterTest.kt index ef8d373630..94c19bb81d 100644 --- a/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/search/GlobalSearchPresenterTest.kt +++ b/features/home/impl/src/test/kotlin/io/element/android/features/home/impl/search/GlobalSearchPresenterTest.kt @@ -5,6 +5,8 @@ * Please see LICENSE files in the repository root for full details. */ +@file:OptIn(ExperimentalCoroutinesApi::class) + package io.element.android.features.home.impl.search import com.google.common.truth.Truth.assertThat @@ -35,6 +37,7 @@ import io.element.android.tests.testutils.test import io.element.android.tests.testutils.testCoroutineDispatchers import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runCurrent diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteModule.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteBindingContainer.kt similarity index 89% rename from features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteModule.kt rename to features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteBindingContainer.kt index f78c0358a6..f7cd346755 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteModule.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteBindingContainer.kt @@ -22,9 +22,9 @@ import io.element.android.libraries.matrix.api.MatrixClient @ContributesTo(SessionScope::class) @BindingContainer -interface InviteModule { +interface InviteBindingContainer { @Binds - fun bindAcceptDeclinePresenter(presenter: AcceptDeclineInvitePresenter): Presenter + fun bindAcceptDeclineInvitePresenter(presenter: AcceptDeclineInvitePresenter): Presenter companion object { @Provides diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomBindingContainer.kt similarity index 98% rename from features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt rename to features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomBindingContainer.kt index 3304169b1a..3ab9cbfa97 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomBindingContainer.kt @@ -27,7 +27,7 @@ import java.util.Optional @BindingContainer @ContributesTo(SessionScope::class) -object JoinRoomModule { +object JoinRoomBindingContainer { @Provides fun providesJoinRoomPresenterFactory( client: MatrixClient, diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/KnockRequestsModule.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/di/KnockRequestsBindingContainer.kt similarity index 81% rename from features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/KnockRequestsModule.kt rename to features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/di/KnockRequestsBindingContainer.kt index 73e4a2ddeb..04d5400831 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/KnockRequestsModule.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/di/KnockRequestsBindingContainer.kt @@ -6,7 +6,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.knockrequests.impl.data +package io.element.android.features.knockrequests.impl.data.di import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo @@ -14,16 +14,17 @@ import dev.zacsweers.metro.Provides import dev.zacsweers.metro.SingleIn import io.element.android.features.knockrequests.api.KnockRequestPermissions import io.element.android.features.knockrequests.api.knockRequestPermissions +import io.element.android.features.knockrequests.impl.data.KnockRequestsService import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.room.powerlevels.permissionsFlow @BindingContainer @ContributesTo(RoomScope::class) -object KnockRequestsModule { +object KnockRequestsBindingContainer { @Provides @SingleIn(RoomScope::class) - fun knockRequestsService(room: JoinedRoom): KnockRequestsService { + fun providesKnockRequestsService(room: JoinedRoom): KnockRequestsService { return KnockRequestsService( knockRequestsFlow = room.knockRequestsFlow, permissionsFlow = room.permissionsFlow(KnockRequestPermissions.DEFAULT) { perms -> 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/LeaveRoomBindingContainer.kt similarity index 95% rename from features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomModule.kt rename to features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomBindingContainer.kt index db5b1416ee..866af68cc8 100644 --- 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/LeaveRoomBindingContainer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.di.SessionScope @ContributesTo(SessionScope::class) @BindingContainer -interface LeaveRoomModule { +interface LeaveRoomBindingContainer { @Binds fun bindLeaveRoomPresenter(presenter: LeaveRoomPresenter): Presenter } diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/LockScreenConfig.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/LockScreenConfig.kt index c246390a63..fa3ca9cfd9 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/LockScreenConfig.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/LockScreenConfig.kt @@ -8,12 +8,7 @@ package io.element.android.features.lockscreen.impl -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.BindingContainer -import dev.zacsweers.metro.ContributesTo -import dev.zacsweers.metro.Provides import kotlin.time.Duration -import io.element.android.appconfig.LockScreenConfig as AppConfigLockScreenConfig data class LockScreenConfig( val isPinMandatory: Boolean, @@ -24,18 +19,3 @@ data class LockScreenConfig( val isStrongBiometricsEnabled: Boolean, val isWeakBiometricsEnabled: Boolean, ) - -@ContributesTo(AppScope::class) -@BindingContainer -object LockScreenConfigModule { - @Provides - fun providesLockScreenConfig(): LockScreenConfig = LockScreenConfig( - isPinMandatory = AppConfigLockScreenConfig.IS_PIN_MANDATORY, - forbiddenPinCodes = AppConfigLockScreenConfig.FORBIDDEN_PIN_CODES, - pinSize = AppConfigLockScreenConfig.PIN_SIZE, - maxPinCodeAttemptsBeforeLogout = AppConfigLockScreenConfig.MAX_PIN_CODE_ATTEMPTS_BEFORE_LOGOUT, - gracePeriod = AppConfigLockScreenConfig.GRACE_PERIOD, - isStrongBiometricsEnabled = AppConfigLockScreenConfig.IS_STRONG_BIOMETRICS_ENABLED, - isWeakBiometricsEnabled = AppConfigLockScreenConfig.IS_WEAK_BIOMETRICS_ENABLED, - ) -} diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/di/LockScreenConfigBindingContainer.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/di/LockScreenConfigBindingContainer.kt new file mode 100644 index 0000000000..3acade5e86 --- /dev/null +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/di/LockScreenConfigBindingContainer.kt @@ -0,0 +1,29 @@ +/* + * 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.features.lockscreen.impl.di + +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import io.element.android.features.lockscreen.impl.LockScreenConfig + +@ContributesTo(AppScope::class) +@BindingContainer +object LockScreenConfigBindingContainer { + @Provides + fun providesLockScreenConfig(): LockScreenConfig = LockScreenConfig( + isPinMandatory = io.element.android.appconfig.LockScreenConfig.IS_PIN_MANDATORY, + forbiddenPinCodes = io.element.android.appconfig.LockScreenConfig.FORBIDDEN_PIN_CODES, + pinSize = io.element.android.appconfig.LockScreenConfig.PIN_SIZE, + maxPinCodeAttemptsBeforeLogout = io.element.android.appconfig.LockScreenConfig.MAX_PIN_CODE_ATTEMPTS_BEFORE_LOGOUT, + gracePeriod = io.element.android.appconfig.LockScreenConfig.GRACE_PERIOD, + isStrongBiometricsEnabled = io.element.android.appconfig.LockScreenConfig.IS_STRONG_BIOMETRICS_ENABLED, + isWeakBiometricsEnabled = io.element.android.appconfig.LockScreenConfig.IS_WEAK_BIOMETRICS_ENABLED, + ) +} diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/LoginModule.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/LoginBindingContainer.kt similarity index 96% rename from features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/LoginModule.kt rename to features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/LoginBindingContainer.kt index 037acf859b..257587770f 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/LoginModule.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/LoginBindingContainer.kt @@ -20,7 +20,7 @@ import io.element.android.libraries.architecture.Presenter @ContributesTo(AppScope::class) @BindingContainer -interface LoginModule { +interface LoginBindingContainer { @Binds fun bindChangeServerPresenter(presenter: ChangeServerPresenter): Presenter diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/di/LogoutModule.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/di/LogoutBindingContainer.kt similarity index 95% rename from features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/di/LogoutModule.kt rename to features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/di/LogoutBindingContainer.kt index 9b38fde22e..879d0fc5cf 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/di/LogoutModule.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/di/LogoutBindingContainer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.di.SessionScope @ContributesTo(SessionScope::class) @BindingContainer -interface LogoutModule { +interface LogoutBindingContainer { @Binds fun bindDirectLogoutPresenter(presenter: DirectLogoutPresenter): Presenter } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesBindsModule.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesBindingContainer.kt similarity index 98% rename from features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesBindsModule.kt rename to features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesBindingContainer.kt index a345e09fa2..7e67c027d7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesBindsModule.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesBindingContainer.kt @@ -34,7 +34,7 @@ import io.element.android.libraries.di.RoomScope @ContributesTo(RoomScope::class) @BindingContainer -interface MessagesBindsModule { +interface MessagesBindingContainer { @Binds fun bindPinnedMessagesBannerPresenter(presenter: PinnedMessagesBannerPresenter): Presenter diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesModule.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesBindingContainer.kt similarity index 85% rename from features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesModule.kt rename to features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesBindingContainer.kt index 856a14cdb0..f66c26061b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesModule.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesBindingContainer.kt @@ -18,8 +18,8 @@ import io.element.android.libraries.matrix.api.timeline.Timeline @ContributesTo(RoomScope::class) @BindingContainer -object MessagesProvidesModule { +object MessagesProvidesBindingContainer { @Provides @LiveTimeline - fun provideLiveTimeline(joinedRoom: JoinedRoom): Timeline = joinedRoom.liveTimeline + fun providesLiveTimeline(joinedRoom: JoinedRoom): Timeline = joinedRoom.liveTimeline } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemPresenterFactories.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemPresenterFactories.kt index 1063157bef..2234593c4b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemPresenterFactories.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemPresenterFactories.kt @@ -10,28 +10,13 @@ package io.element.android.features.messages.impl.timeline.di import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import dev.zacsweers.metro.BindingContainer -import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Multibinds import dev.zacsweers.metro.SingleIn import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.RoomScope import kotlin.reflect.KClass -/** - * Container that declares the [TimelineItemPresenterFactory] map multi binding. - * - * Its sole purpose is to support the case of an empty map multibinding. - */ -@BindingContainer -@ContributesTo(RoomScope::class) -interface TimelineItemPresenterFactoriesModule { - @Multibinds - fun multiBindTimelineItemPresenterFactories(): @JvmSuppressWildcards Map, TimelineItemPresenterFactory<*, *>> -} - /** * Room level caching layer for the [TimelineItemPresenterFactory] instances. * diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemPresenterFactoriesBindingContainer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemPresenterFactoriesBindingContainer.kt new file mode 100644 index 0000000000..65dcd6dee0 --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemPresenterFactoriesBindingContainer.kt @@ -0,0 +1,27 @@ +/* + * 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.features.messages.impl.timeline.di + +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Multibinds +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent +import io.element.android.libraries.di.RoomScope +import kotlin.reflect.KClass + +/** + * Container that declares the [TimelineItemPresenterFactory] map multi binding. + * + * Its sole purpose is to support the case of an empty map multibinding. + */ +@BindingContainer +@ContributesTo(RoomScope::class) +interface TimelineItemPresenterFactoriesBindingContainer { + @Multibinds + fun multiBindTimelineItemPresenterFactories(): @JvmSuppressWildcards Map, TimelineItemPresenterFactory<*, *>> +} diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/VoiceMessagePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/VoiceMessagePresenter.kt index eef5c5efab..066ce09500 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/VoiceMessagePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/VoiceMessagePresenter.kt @@ -12,27 +12,12 @@ import androidx.compose.runtime.Composable import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory import dev.zacsweers.metro.AssistedInject -import dev.zacsweers.metro.BindingContainer -import dev.zacsweers.metro.Binds -import dev.zacsweers.metro.ContributesTo -import dev.zacsweers.metro.IntoMap -import io.element.android.features.messages.impl.timeline.di.TimelineItemEventContentKey import io.element.android.features.messages.impl.timeline.di.TimelineItemPresenterFactory import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.di.RoomScope import io.element.android.libraries.voiceplayer.api.VoiceMessagePresenterFactory import io.element.android.libraries.voiceplayer.api.VoiceMessageState -@BindingContainer -@ContributesTo(RoomScope::class) -interface VoiceMessagePresenterModule { - @Binds - @IntoMap - @TimelineItemEventContentKey(TimelineItemVoiceContent::class) - fun bindVoiceMessagePresenterFactory(factory: VoiceMessagePresenter.Factory): TimelineItemPresenterFactory<*, *> -} - @AssistedInject class VoiceMessagePresenter( voiceMessagePresenterFactory: VoiceMessagePresenterFactory, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/di/VoiceMessagePresenterBindingContainer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/di/VoiceMessagePresenterBindingContainer.kt new file mode 100644 index 0000000000..422ade8856 --- /dev/null +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/di/VoiceMessagePresenterBindingContainer.kt @@ -0,0 +1,27 @@ +/* + * 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.features.messages.impl.voicemessages.timeline.di + +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.IntoMap +import io.element.android.features.messages.impl.timeline.di.TimelineItemEventContentKey +import io.element.android.features.messages.impl.timeline.di.TimelineItemPresenterFactory +import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent +import io.element.android.features.messages.impl.voicemessages.timeline.VoiceMessagePresenter +import io.element.android.libraries.di.RoomScope + +@BindingContainer +@ContributesTo(RoomScope::class) +interface VoiceMessagePresenterBindingContainer { + @Binds + @IntoMap + @TimelineItemEventContentKey(TimelineItemVoiceContent::class) + fun bindVoiceMessagePresenterFactory(factory: VoiceMessagePresenter.Factory): TimelineItemPresenterFactory<*, *> +} diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/di/DeveloperSettingsModule.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/di/DeveloperSettingsBindingContainer.kt similarity index 94% rename from features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/di/DeveloperSettingsModule.kt rename to features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/di/DeveloperSettingsBindingContainer.kt index bad0ccae0f..c95b608853 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/di/DeveloperSettingsModule.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/di/DeveloperSettingsBindingContainer.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.architecture.Presenter @ContributesTo(AppScope::class) @BindingContainer -interface DeveloperSettingsModule { +interface DeveloperSettingsBindingContainer { @Binds fun bindAppDeveloperSettingsPresenter(presenter: AppDeveloperSettingsPresenter): Presenter } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusBindingContainer.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/di/UserStatusBindingContainer.kt similarity index 73% rename from features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusBindingContainer.kt rename to features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/di/UserStatusBindingContainer.kt index dfa77483f8..0e6f1bdc2f 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/UserStatusBindingContainer.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/di/UserStatusBindingContainer.kt @@ -5,11 +5,13 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.preferences.impl.userstatus +package io.element.android.features.preferences.impl.userstatus.di import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo +import io.element.android.features.preferences.impl.userstatus.UserStatusPresenter +import io.element.android.features.preferences.impl.userstatus.UserStatusState import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope 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/RageshakeBindingContainer.kt similarity index 97% rename from features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeModule.kt rename to features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeBindingContainer.kt index 475127a345..04edb3c0ac 100644 --- 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/RageshakeBindingContainer.kt @@ -22,7 +22,7 @@ import io.element.android.libraries.architecture.Presenter @ContributesTo(AppScope::class) @BindingContainer -interface RageshakeModule { +interface RageshakeBindingContainer { @Binds fun bindRageshakePreferencesPresenter(presenter: RageshakePreferencesPresenter): Presenter diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverModule.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverBindingContainer.kt similarity index 92% rename from features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverModule.kt rename to features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverBindingContainer.kt index 8f5c9d733b..a3796fad91 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverModule.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverBindingContainer.kt @@ -18,9 +18,9 @@ import io.element.android.libraries.matrix.api.core.RoomAlias @BindingContainer @ContributesTo(SessionScope::class) -object RoomAliasResolverModule { +object RoomAliasResolverBindingContainer { @Provides - fun providesJoinRoomPresenterFactory( + fun providesRoomAliasResolverPresenterFactory( client: MatrixClient, ): RoomAliasResolverPresenter.Factory { return object : RoomAliasResolverPresenter.Factory { diff --git a/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/di/RoomCallModule.kt b/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/di/RoomCallBindingContainer.kt similarity index 95% rename from features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/di/RoomCallModule.kt rename to features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/di/RoomCallBindingContainer.kt index fc649dd1f2..aa2d0fdde4 100644 --- a/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/di/RoomCallModule.kt +++ b/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/di/RoomCallBindingContainer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.di.RoomScope @ContributesTo(RoomScope::class) @BindingContainer -interface RoomCallModule { +interface RoomCallBindingContainer { @Binds fun bindRoomCallStatePresenter(presenter: RoomCallStatePresenter): Presenter } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberModule.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindingContainer.kt similarity index 95% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberModule.kt rename to features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindingContainer.kt index 479f23f90d..6651e85097 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberModule.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindingContainer.kt @@ -21,9 +21,9 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom @BindingContainer @ContributesTo(RoomScope::class) -object RoomMemberModule { +object RoomMemberBindingContainer { @Provides - fun provideRoomMemberDetailsPresenterFactory( + fun providesRoomMemberDetailsPresenterFactory( room: JoinedRoom, userProfilePresenterFactory: UserProfilePresenterFactory, encryptionService: EncryptionService, diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/di/RoomMemberModerationModule.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/di/RoomMemberModerationBindingContainer.kt similarity index 94% rename from features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/di/RoomMemberModerationModule.kt rename to features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/di/RoomMemberModerationBindingContainer.kt index ab82f6ced4..1ffe6df41f 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/di/RoomMemberModerationModule.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/di/RoomMemberModerationBindingContainer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.di.RoomScope @ContributesTo(RoomScope::class) @BindingContainer -interface RoomMemberModerationModule { +interface RoomMemberModerationBindingContainer { @Binds fun bindRoomMemberModerationPresenter(presenter: RoomMemberModerationPresenter): Presenter } diff --git a/libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreModule.kt b/libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreBindingContainer.kt similarity index 96% rename from libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreModule.kt rename to libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreBindingContainer.kt index 89de82a08f..c28cc0601c 100644 --- a/libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreModule.kt +++ b/libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreBindingContainer.kt @@ -22,10 +22,10 @@ import timber.log.Timber @BindingContainer @ContributesTo(AppScope::class) -object CacheStoreModule { +object CacheStoreBindingContainer { @Provides @SingleIn(AppScope::class) - fun provideCacheDatabase( + fun providesCacheDatabase( @ApplicationContext context: Context, ): CacheDatabase { val name = "cache_database" diff --git a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/KeyStoreSecretKeyRepository.kt b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/KeyStoreSecretKeyRepository.kt index bcd38695c4..fe27c49f36 100644 --- a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/KeyStoreSecretKeyRepository.kt +++ b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/KeyStoreSecretKeyRepository.kt @@ -26,6 +26,8 @@ import java.util.concurrent.ConcurrentHashMap import javax.crypto.KeyGenerator import javax.crypto.SecretKey +internal const val ANDROID_KEYSTORE = "AndroidKeyStore" + /** * Default implementation of [SecretKeyRepository] that uses the Android Keystore to store the keys. * The generated key uses AES algorithm, with a key size of 128 bits, and the GCM block mode. diff --git a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/CryptographyModule.kt b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/di/CryptographyBindingContainer.kt similarity index 79% rename from libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/CryptographyModule.kt rename to libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/di/CryptographyBindingContainer.kt index e9a9eb7b34..bdfe6f9e5d 100644 --- a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/CryptographyModule.kt +++ b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/di/CryptographyBindingContainer.kt @@ -6,19 +6,18 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.libraries.cryptography.impl +package io.element.android.libraries.cryptography.impl.di import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides +import io.element.android.libraries.cryptography.impl.ANDROID_KEYSTORE import java.security.KeyStore -internal const val ANDROID_KEYSTORE = "AndroidKeyStore" - @ContributesTo(AppScope::class) @BindingContainer -object CryptographyModule { +object CryptographyBindingContainer { @Provides fun providesAndroidKeyStore(): KeyStore { return KeyStore.getInstance(ANDROID_KEYSTORE).apply { diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterModule.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterBindingContainer.kt similarity index 84% rename from libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterModule.kt rename to libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterBindingContainer.kt index c80324c149..ee8afe678f 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterModule.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterBindingContainer.kt @@ -19,7 +19,7 @@ import kotlin.time.Clock @BindingContainer @ContributesTo(AppScope::class) -object DateFormatterModule { +object DateFormatterBindingContainer { @Provides fun providesClock(): Clock = Clock.System @@ -27,5 +27,5 @@ object DateFormatterModule { fun providesLocale(): Locale = Locale.getDefault() @Provides - fun providesTimezone(): TimezoneProvider = TimezoneProvider { TimeZone.currentSystemDefault() } + fun providesTimezoneProvider(): TimezoneProvider = TimezoneProvider { TimeZone.currentSystemDefault() } } diff --git a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/di/FeatureFlagModule.kt b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/di/FeatureFlagBindingContainer.kt similarity index 96% rename from libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/di/FeatureFlagModule.kt rename to libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/di/FeatureFlagBindingContainer.kt index de3f8aa519..be4fa6f23f 100644 --- a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/di/FeatureFlagModule.kt +++ b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/di/FeatureFlagBindingContainer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.featureflag.impl.PreferencesFeatureFlagProvi @BindingContainer @ContributesTo(AppScope::class) -object FeatureFlagModule { +object FeatureFlagBindingContainer { @JvmStatic @Provides @ElementsIntoSet diff --git a/libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/di/FullScreenIntentModule.kt b/libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/di/FullScreenIntentBindingContainer.kt similarity index 95% rename from libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/di/FullScreenIntentModule.kt rename to libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/di/FullScreenIntentBindingContainer.kt index 249485b15c..ae43cebd46 100644 --- a/libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/di/FullScreenIntentModule.kt +++ b/libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/di/FullScreenIntentBindingContainer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.fullscreenintent.impl.FullScreenIntentPermis @ContributesTo(AppScope::class) @BindingContainer -interface FullScreenIntentModule { +interface FullScreenIntentBindingContainer { @Binds fun bindFullScreenIntentPermissionsPresenter(presenter: FullScreenIntentPermissionsPresenter): Presenter } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/RoomModule.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/RoomBindingContainer.kt similarity index 96% rename from libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/RoomModule.kt rename to libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/RoomBindingContainer.kt index af6f0325d3..d598f85bad 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/RoomModule.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/RoomBindingContainer.kt @@ -18,7 +18,7 @@ import kotlinx.coroutines.CoroutineScope @BindingContainer @ContributesTo(RoomScope::class) -object RoomModule { +object RoomBindingContainer { @RoomCoroutineScope @Provides fun providesSessionCoroutineScope(room: BaseRoom): CoroutineScope { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixModule.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixBindingContainer.kt similarity index 94% rename from libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixModule.kt rename to libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixBindingContainer.kt index f6ea8019e3..f50c0a04cc 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixModule.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixBindingContainer.kt @@ -34,7 +34,7 @@ import kotlinx.coroutines.CoroutineScope @BindingContainer @ContributesTo(SessionScope::class) -object SessionMatrixModule { +object SessionMatrixBindingContainer { @Provides fun providesSessionId(matrixClient: MatrixClient): SessionId { return matrixClient.sessionId @@ -56,7 +56,7 @@ object SessionMatrixModule { } @Provides - fun provideRoomMembershipObserver(matrixClient: MatrixClient): RoomMembershipObserver { + fun providesRoomMembershipObserver(matrixClient: MatrixClient): RoomMembershipObserver { return matrixClient.roomMembershipObserver } @@ -112,7 +112,7 @@ object SessionMatrixModule { } @Provides - fun providesGetUrlResolverClient(matrixClient: MatrixClient): ClientUrlContentFetcher { + fun providesClientUrlContentFetcher(matrixClient: MatrixClient): ClientUrlContentFetcher { return matrixClient } diff --git a/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/SimplePlayer.kt b/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/SimplePlayer.kt index 98ebc5ce50..9bec86e72f 100644 --- a/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/SimplePlayer.kt +++ b/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/SimplePlayer.kt @@ -8,16 +8,8 @@ package io.element.android.libraries.mediaplayer.impl -import android.content.Context -import androidx.media3.common.C import androidx.media3.common.MediaItem import androidx.media3.common.Player -import androidx.media3.exoplayer.ExoPlayer -import dev.zacsweers.metro.BindingContainer -import dev.zacsweers.metro.ContributesTo -import dev.zacsweers.metro.Provides -import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.annotations.ApplicationContext /** * A subset of media3 [Player] that only exposes the few methods we need making it easier to mock. @@ -44,15 +36,6 @@ interface SimplePlayer { } } -@ContributesTo(RoomScope::class) -@BindingContainer -object SimplePlayerModule { - @Provides - fun simplePlayerProvider( - @ApplicationContext context: Context, - ): SimplePlayer = DefaultSimplePlayer(ExoPlayer.Builder(context).setWakeMode(C.WAKE_MODE_LOCAL).build()) -} - /** * Default implementation of [SimplePlayer] backed by a media3 [Player]. */ diff --git a/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/di/SimplePlayerBindingContainer.kt b/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/di/SimplePlayerBindingContainer.kt new file mode 100644 index 0000000000..85518e58fd --- /dev/null +++ b/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/di/SimplePlayerBindingContainer.kt @@ -0,0 +1,28 @@ +/* + * 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.libraries.mediaplayer.impl.di + +import android.content.Context +import androidx.media3.common.C +import androidx.media3.exoplayer.ExoPlayer +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.di.annotations.ApplicationContext +import io.element.android.libraries.mediaplayer.impl.DefaultSimplePlayer +import io.element.android.libraries.mediaplayer.impl.SimplePlayer + +@ContributesTo(RoomScope::class) +@BindingContainer +object SimplePlayerBindingContainer { + @Provides + fun providesSimplePlayer( + @ApplicationContext context: Context, + ): SimplePlayer = DefaultSimplePlayer(ExoPlayer.Builder(context).setWakeMode(C.WAKE_MODE_LOCAL).build()) +} diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemPresenterFactories.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemPresenterFactories.kt index b74debc177..94c5485130 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemPresenterFactories.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemPresenterFactories.kt @@ -10,28 +10,13 @@ package io.element.android.libraries.mediaviewer.impl.gallery.di import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import dev.zacsweers.metro.BindingContainer -import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Multibinds import dev.zacsweers.metro.SingleIn import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.RoomScope import io.element.android.libraries.mediaviewer.impl.model.MediaItem import kotlin.reflect.KClass -/** - * Container that declares the [MediaItemPresenterFactory] map multi binding. - * - * Its sole purpose is to support the case of an empty map multibinding. - */ -@BindingContainer -@ContributesTo(RoomScope::class) -interface MediaItemPresenterFactoriesModule { - @Multibinds - fun multiBindMediaItemPresenterFactories(): @JvmSuppressWildcards Map, MediaItemPresenterFactory<*, *>> -} - /** * Room level caching layer for the [MediaItemPresenterFactory] instances. * diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemPresenterFactoriesBindingContainer.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemPresenterFactoriesBindingContainer.kt new file mode 100644 index 0000000000..2ab533aeca --- /dev/null +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemPresenterFactoriesBindingContainer.kt @@ -0,0 +1,27 @@ +/* + * 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.libraries.mediaviewer.impl.gallery.di + +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Multibinds +import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.mediaviewer.impl.model.MediaItem +import kotlin.reflect.KClass + +/** + * Container that declares the [MediaItemPresenterFactory] map multi binding. + * + * Its sole purpose is to support the case of an empty map multibinding. + */ +@BindingContainer +@ContributesTo(RoomScope::class) +interface MediaItemPresenterFactoriesBindingContainer { + @Multibinds + fun multiBindMediaItemPresenterFactories(): @JvmSuppressWildcards Map, MediaItemPresenterFactory<*, *>> +} diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/voice/VoiceMessagePresenter.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/voice/VoiceMessagePresenter.kt index 32a9b0f74c..2910d28936 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/voice/VoiceMessagePresenter.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/voice/VoiceMessagePresenter.kt @@ -12,28 +12,13 @@ import androidx.compose.runtime.Composable import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory import dev.zacsweers.metro.AssistedInject -import dev.zacsweers.metro.BindingContainer -import dev.zacsweers.metro.Binds -import dev.zacsweers.metro.ContributesTo -import dev.zacsweers.metro.IntoMap import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.mediaviewer.impl.gallery.di.MediaItemEventContentKey import io.element.android.libraries.mediaviewer.impl.gallery.di.MediaItemPresenterFactory import io.element.android.libraries.mediaviewer.impl.model.MediaItem import io.element.android.libraries.voiceplayer.api.VoiceMessagePresenterFactory import io.element.android.libraries.voiceplayer.api.VoiceMessageState import kotlin.time.Duration -@BindingContainer -@ContributesTo(RoomScope::class) -interface VoiceMessagePresenterModule { - @Binds - @IntoMap - @MediaItemEventContentKey(MediaItem.Voice::class) - fun bindVoiceMessagePresenterFactory(factory: VoiceMessagePresenter.Factory): MediaItemPresenterFactory<*, *> -} - @AssistedInject class VoiceMessagePresenter( voiceMessagePresenterFactory: VoiceMessagePresenterFactory, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/voice/di/VoiceMessagePresenterBindingContainer.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/voice/di/VoiceMessagePresenterBindingContainer.kt new file mode 100644 index 0000000000..384f48367a --- /dev/null +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/voice/di/VoiceMessagePresenterBindingContainer.kt @@ -0,0 +1,27 @@ +/* + * 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.libraries.mediaviewer.impl.gallery.voice.di + +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.IntoMap +import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.mediaviewer.impl.gallery.di.MediaItemEventContentKey +import io.element.android.libraries.mediaviewer.impl.gallery.di.MediaItemPresenterFactory +import io.element.android.libraries.mediaviewer.impl.gallery.voice.VoiceMessagePresenter +import io.element.android.libraries.mediaviewer.impl.model.MediaItem + +@BindingContainer +@ContributesTo(RoomScope::class) +interface VoiceMessagePresenterBindingContainer { + @Binds + @IntoMap + @MediaItemEventContentKey(MediaItem.Voice::class) + fun bindVoiceMessagePresenterFactory(factory: VoiceMessagePresenter.Factory): MediaItemPresenterFactory<*, *> +} diff --git a/libraries/network/src/main/kotlin/io/element/android/libraries/network/NetworkModule.kt b/libraries/network/src/main/kotlin/io/element/android/libraries/network/di/NetworkBindingContainer.kt similarity index 95% rename from libraries/network/src/main/kotlin/io/element/android/libraries/network/NetworkModule.kt rename to libraries/network/src/main/kotlin/io/element/android/libraries/network/di/NetworkBindingContainer.kt index 90e78d860e..46f00a6b9b 100644 --- a/libraries/network/src/main/kotlin/io/element/android/libraries/network/NetworkModule.kt +++ b/libraries/network/src/main/kotlin/io/element/android/libraries/network/di/NetworkBindingContainer.kt @@ -6,7 +6,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.libraries.network +package io.element.android.libraries.network.di import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer @@ -23,7 +23,7 @@ import java.util.concurrent.TimeUnit @BindingContainer @ContributesTo(AppScope::class) -object NetworkModule { +object NetworkBindingContainer { @Provides @SingleIn(AppScope::class) fun providesOkHttpClient( diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesModule.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/di/SessionPreferencesBindingContainer.kt similarity index 84% rename from libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesModule.kt rename to libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/di/SessionPreferencesBindingContainer.kt index 43de0b5a62..396c3c7bc0 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesModule.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/di/SessionPreferencesBindingContainer.kt @@ -6,7 +6,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.libraries.preferences.impl.store +package io.element.android.libraries.preferences.impl.store.di import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo @@ -15,11 +15,12 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.preferences.api.store.SessionPreferencesStore +import io.element.android.libraries.preferences.impl.store.DefaultSessionPreferencesStoreFactory import kotlinx.coroutines.CoroutineScope @BindingContainer @ContributesTo(SessionScope::class) -object SessionPreferencesModule { +object SessionPreferencesBindingContainer { @Provides fun providesSessionPreferencesStore( defaultSessionPreferencesStoreFactory: DefaultSessionPreferencesStoreFactory, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushModule.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushBindingContainer.kt similarity index 88% rename from libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushModule.kt rename to libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushBindingContainer.kt index b7e807523c..2274232406 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushModule.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushBindingContainer.kt @@ -22,10 +22,10 @@ import io.element.android.libraries.push.impl.battery.BatteryOptimizationPresent @BindingContainer @ContributesTo(AppScope::class) -interface PushModule { +interface PushBindingContainer { companion object { @Provides - fun provideNotificationCompatManager(@ApplicationContext context: Context): NotificationManagerCompat { + fun providesNotificationManagerCompat(@ApplicationContext context: Context): NotificationManagerCompat { return NotificationManagerCompat.from(context) } } diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/di/PushHistoryModule.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/di/PushHistoryBindingContainer.kt similarity index 96% rename from libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/di/PushHistoryModule.kt rename to libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/di/PushHistoryBindingContainer.kt index 93194b2738..f50b221c58 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/di/PushHistoryModule.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/di/PushHistoryBindingContainer.kt @@ -23,10 +23,10 @@ import timber.log.Timber @BindingContainer @ContributesTo(AppScope::class) -object PushHistoryModule { +object PushHistoryBindingContainer { @Provides @SingleIn(AppScope::class) - fun providePushDatabase( + fun providesPushDatabase( @ApplicationContext context: Context, ): PushDatabase { val name = "push_database" diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageBindingContainer.kt similarity index 96% rename from libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt rename to libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageBindingContainer.kt index 8955aa4a27..e64268d608 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageModule.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageBindingContainer.kt @@ -23,10 +23,10 @@ import timber.log.Timber @BindingContainer @ContributesTo(AppScope::class) -object SessionStorageModule { +object SessionStorageBindingContainer { @Provides @SingleIn(AppScope::class) - fun provideMatrixDatabase( + fun providesSessionDatabase( @ApplicationContext context: Context, ): SessionDatabase { val name = "session_database" diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/di/VoiceRecorderModule.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/di/VoiceRecorderBindingContainer.kt similarity index 87% rename from libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/di/VoiceRecorderModule.kt rename to libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/di/VoiceRecorderBindingContainer.kt index ee9f7bfa9d..3dd1b902fa 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/di/VoiceRecorderModule.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/di/VoiceRecorderBindingContainer.kt @@ -22,9 +22,9 @@ import io.element.android.opusencoder.OggOpusEncoder @BindingContainer @ContributesTo(RoomScope::class) -object VoiceRecorderModule { +object VoiceRecorderBindingContainer { @Provides - fun provideAudioConfig(): AudioConfig { + fun providesAudioConfig(): AudioConfig { val sampleRate = SampleRate return AudioConfig( format = AudioFormat.Builder() @@ -40,7 +40,7 @@ object VoiceRecorderModule { } @Provides - public fun provideVoiceFileConfig(): VoiceFileConfig = + public fun providesVoiceFileConfig(): VoiceFileConfig = VoiceFileConfig( cacheSubdir = "voice_recordings", fileExt = "ogg", @@ -48,5 +48,5 @@ object VoiceRecorderModule { ) @Provides - fun provideOggOpusEncoder(): OggOpusEncoder = OggOpusEncoder.create() + fun providesOggOpusEncoder(): OggOpusEncoder = OggOpusEncoder.create() } diff --git a/libraries/voicerecorder/impl/src/test/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorderTest.kt b/libraries/voicerecorder/impl/src/test/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorderTest.kt index 158b9ba481..070b341d76 100644 --- a/libraries/voicerecorder/impl/src/test/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorderTest.kt +++ b/libraries/voicerecorder/impl/src/test/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorderTest.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.voicerecorder.api.VoiceRecorderState import io.element.android.libraries.voicerecorder.impl.audio.Audio import io.element.android.libraries.voicerecorder.impl.audio.AudioConfig import io.element.android.libraries.voicerecorder.impl.audio.SampleRate -import io.element.android.libraries.voicerecorder.impl.di.VoiceRecorderModule +import io.element.android.libraries.voicerecorder.impl.di.VoiceRecorderBindingContainer import io.element.android.libraries.voicerecorder.test.FakeAudioLevelCalculator import io.element.android.libraries.voicerecorder.test.FakeAudioReaderFactory import io.element.android.libraries.voicerecorder.test.FakeEncoder @@ -151,7 +151,7 @@ class DefaultVoiceRecorderTest { } private fun TestScope.createDefaultVoiceRecorder(): DefaultVoiceRecorder { - val fileConfig = VoiceRecorderModule.provideVoiceFileConfig() + val fileConfig = VoiceRecorderBindingContainer.providesVoiceFileConfig() return DefaultVoiceRecorder( dispatchers = testCoroutineDispatchers(), timeSource = timeSource, diff --git a/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/WorkManagerModule.kt b/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/di/WorkManagerBindingContainer.kt similarity index 89% rename from libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/WorkManagerModule.kt rename to libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/di/WorkManagerBindingContainer.kt index 7df9e7f431..65399112ef 100644 --- a/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/WorkManagerModule.kt +++ b/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/di/WorkManagerBindingContainer.kt @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.libraries.workmanager.impl +package io.element.android.libraries.workmanager.impl.di import android.content.Context import androidx.work.WorkManager @@ -18,7 +18,7 @@ import io.element.android.libraries.di.annotations.ApplicationContext @BindingContainer @ContributesTo(AppScope::class) -object WorkManagerModule { +object WorkManagerBindingContainer { @Provides @SingleIn(AppScope::class) fun providesWorkManager( diff --git a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsModule.kt b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsBindingContainer.kt similarity index 85% rename from services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsModule.kt rename to services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsBindingContainer.kt index 3c4b00c7a0..d411926529 100644 --- a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsModule.kt +++ b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsBindingContainer.kt @@ -15,7 +15,7 @@ import io.element.android.libraries.di.identifiers.SentrySdkDsn @BindingContainer @ContributesTo(AppScope::class) -object NoopAnalyticsModule { +object NoopAnalyticsBindingContainer { @Provides - fun provideSentrySdkDsn(): SentrySdkDsn? = null + fun providesSentrySdkDsn(): SentrySdkDsn? = null } diff --git a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryModule.kt b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryBindingContainer.kt similarity index 73% rename from services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryModule.kt rename to services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryBindingContainer.kt index 74b7d56683..9e1ca7b886 100644 --- a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryModule.kt +++ b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryBindingContainer.kt @@ -17,10 +17,10 @@ import io.element.android.services.analyticsproviders.sentry.SentryConfig @BindingContainer @ContributesTo(AppScope::class) -object SentryModule { +object SentryBindingContainer { @Provides - fun provideSentryDsn(): SentryDsn? = SentryConfig.DSN.takeIf { it.isNotBlank() }?.let(::SentryDsn) + fun providesSentryDsn(): SentryDsn? = SentryConfig.DSN.takeIf { it.isNotBlank() }?.let(::SentryDsn) @Provides - fun provideSentrySdkDsn(): SentrySdkDsn? = SentryConfig.SDK_DSN.takeIf { it.isNotBlank() }?.let(::SentrySdkDsn) + fun providesSentrySdkDsn(): SentrySdkDsn? = SentryConfig.SDK_DSN.takeIf { it.isNotBlank() }?.let(::SentrySdkDsn) } diff --git a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/di/AppNavStateModule.kt b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/di/AppNavStateBindingContainer.kt similarity index 92% rename from services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/di/AppNavStateModule.kt rename to services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/di/AppNavStateBindingContainer.kt index 4cf9c25b7b..c7ffa7aab2 100644 --- a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/di/AppNavStateModule.kt +++ b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/di/AppNavStateBindingContainer.kt @@ -20,9 +20,9 @@ import io.element.android.services.appnavstate.impl.initializer.AppForegroundSta @BindingContainer @ContributesTo(AppScope::class) -object AppNavStateModule { +object AppNavStateBindingContainer { @Provides - fun provideAppForegroundStateService( + fun providesAppForegroundStateService( @ApplicationContext context: Context ): AppForegroundStateService = AppInitializer.getInstance(context).initializeComponent(AppForegroundStateServiceInitializer::class.java) diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/TimeModule.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/di/TimeBindingContainer.kt similarity index 79% rename from services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/TimeModule.kt rename to services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/di/TimeBindingContainer.kt index 766a63ebfd..fad0e4a3ab 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/TimeModule.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/di/TimeBindingContainer.kt @@ -6,7 +6,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.services.toolbox.impl.systemclock +package io.element.android.services.toolbox.impl.systemclock.di import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer @@ -16,9 +16,9 @@ import kotlin.time.TimeSource @BindingContainer @ContributesTo(AppScope::class) -object TimeModule { +object TimeBindingContainer { @Provides - fun timeSource(): TimeSource { + fun providesTimeSource(): TimeSource { return TimeSource.Monotonic } }