From e6116d584080c938c6c4c2bf2d2566aa35fa1558 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 24 Aug 2026 11:38:11 +0200 Subject: [PATCH] Move all binding containers to a di package and normalize their method names Every @BindingContainer now lives in a di subpackage, in a file named after it. Containers that were declared inside a shared file (SimplePlayer.kt, LockScreenConfig.kt, VoiceMessagePresenter.kt, TimelineItemPresenterFactories.kt, MediaItemPresenterFactories.kt) are extracted into their own file. Method names are made consistent too: - @Binds functions are named bind, fixing three that named something else (notably RoomAliasResolverBindingContainer, whose provider was still called providesJoinRoomPresenterFactory). - @Provides functions are named after what they provide, and all use the provides prefix rather than a mix of provide and provides. ANDROID_KEYSTORE moves back to the cryptography impl package, next to KeyStoreSecretKeyRepository which uses it; it is not DI specific and would otherwise be unreachable from there. No behaviour change: Metro discovers containers via @ContributesTo and does not care about method names, so the only call site to follow was in DefaultVoiceRecorderTest. Co-Authored-By: Claude Opus 5 (1M context) --- .../android/x/di/AppBindingContainer.kt | 2 +- .../ftue/impl/di/FtueBindingContainer.kt | 2 +- .../home/impl/di/RoomListBindingContainer.kt | 4 +-- .../invite/impl/di/InviteBindingContainer.kt | 2 +- .../{ => di}/KnockRequestsBindingContainer.kt | 5 ++-- .../lockscreen/impl/LockScreenConfig.kt | 20 ------------- .../di/LockScreenConfigBindingContainer.kt | 29 +++++++++++++++++++ .../di/MessagesProvidesBindingContainer.kt | 2 +- .../di/TimelineItemPresenterFactories.kt | 15 ---------- ...eItemPresenterFactoriesBindingContainer.kt | 27 +++++++++++++++++ .../timeline/VoiceMessagePresenter.kt | 15 ---------- .../VoiceMessagePresenterBindingContainer.kt | 27 +++++++++++++++++ .../{ => di}/UserStatusBindingContainer.kt | 4 ++- .../di/RoomAliasResolverBindingContainer.kt | 2 +- .../impl/di/RoomMemberBindingContainer.kt | 2 +- .../impl/di/CacheStoreBindingContainer.kt | 2 +- .../impl/KeyStoreSecretKeyRepository.kt | 2 ++ .../{ => di}/CryptographyBindingContainer.kt | 5 ++-- .../impl/di/DateFormatterBindingContainer.kt | 2 +- .../impl/di/SessionMatrixBindingContainer.kt | 4 +-- .../mediaplayer/impl/SimplePlayer.kt | 17 ----------- .../impl/di/SimplePlayerBindingContainer.kt | 28 ++++++++++++++++++ .../gallery/di/MediaItemPresenterFactories.kt | 15 ---------- ...aItemPresenterFactoriesBindingContainer.kt | 27 +++++++++++++++++ .../gallery/voice/VoiceMessagePresenter.kt | 15 ---------- .../VoiceMessagePresenterBindingContainer.kt | 27 +++++++++++++++++ .../{ => di}/NetworkBindingContainer.kt | 2 +- .../SessionPreferencesBindingContainer.kt | 3 +- .../push/impl/di/PushBindingContainer.kt | 2 +- .../history/di/PushHistoryBindingContainer.kt | 2 +- .../impl/di/SessionStorageBindingContainer.kt | 2 +- .../impl/di/VoiceRecorderBindingContainer.kt | 6 ++-- .../impl/DefaultVoiceRecorderTest.kt | 2 +- .../{ => di}/WorkManagerBindingContainer.kt | 2 +- .../noop/di/NoopAnalyticsBindingContainer.kt | 2 +- .../sentry/di/SentryBindingContainer.kt | 4 +-- .../impl/di/AppNavStateBindingContainer.kt | 2 +- .../{ => di}/TimeBindingContainer.kt | 4 +-- 38 files changed, 204 insertions(+), 131 deletions(-) rename features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/{ => di}/KnockRequestsBindingContainer.kt (84%) create mode 100644 features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/di/LockScreenConfigBindingContainer.kt create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemPresenterFactoriesBindingContainer.kt create mode 100644 features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/di/VoiceMessagePresenterBindingContainer.kt rename features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/userstatus/{ => di}/UserStatusBindingContainer.kt (73%) rename libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/{ => di}/CryptographyBindingContainer.kt (84%) create mode 100644 libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/di/SimplePlayerBindingContainer.kt create mode 100644 libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemPresenterFactoriesBindingContainer.kt create mode 100644 libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/voice/di/VoiceMessagePresenterBindingContainer.kt rename libraries/network/src/main/kotlin/io/element/android/libraries/network/{ => di}/NetworkBindingContainer.kt (97%) rename libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/{ => di}/SessionPreferencesBindingContainer.kt (87%) rename libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/{ => di}/WorkManagerBindingContainer.kt (93%) rename services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/{ => di}/TimeBindingContainer.kt (84%) diff --git a/app/src/main/kotlin/io/element/android/x/di/AppBindingContainer.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindingContainer.kt index 7c6bcc64e2..3f8e94d8ef 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppBindingContainer.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppBindingContainer.kt @@ -111,7 +111,7 @@ object AppBindingContainer { @Provides @SingleIn(AppScope::class) - fun provideSnackbarDispatcher(): SnackbarDispatcher { + fun providesSnackbarDispatcher(): SnackbarDispatcher { return SnackbarDispatcher() } } diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueBindingContainer.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueBindingContainer.kt index 23ebb8d6d1..3ba42f687f 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueBindingContainer.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/di/FtueBindingContainer.kt @@ -20,5 +20,5 @@ import io.element.android.libraries.di.SessionScope @BindingContainer 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/RoomListBindingContainer.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/RoomListBindingContainer.kt index 5e85f8b357..b275559206 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/RoomListBindingContainer.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/di/RoomListBindingContainer.kt @@ -31,10 +31,10 @@ interface RoomListBindingContainer { 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/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteBindingContainer.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteBindingContainer.kt index a5d3bed00d..f7cd346755 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteBindingContainer.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/di/InviteBindingContainer.kt @@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.api.MatrixClient @BindingContainer interface InviteBindingContainer { @Binds - fun bindAcceptDeclinePresenter(presenter: AcceptDeclineInvitePresenter): Presenter + fun bindAcceptDeclineInvitePresenter(presenter: AcceptDeclineInvitePresenter): Presenter companion object { @Provides diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/KnockRequestsBindingContainer.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/di/KnockRequestsBindingContainer.kt similarity index 84% rename from features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/KnockRequestsBindingContainer.kt rename to features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/di/KnockRequestsBindingContainer.kt index 0dfb31da42..04d5400831 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/data/KnockRequestsBindingContainer.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,6 +14,7 @@ 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 @@ -23,7 +24,7 @@ import io.element.android.libraries.matrix.api.room.powerlevels.permissionsFlow 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/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 8f556f89a9..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 LockScreenConfigBindingContainer { - @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/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesBindingContainer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesBindingContainer.kt index bda0437b8a..f66c26061b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesBindingContainer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/di/MessagesProvidesBindingContainer.kt @@ -21,5 +21,5 @@ import io.element.android.libraries.matrix.api.timeline.Timeline 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 8a95d2fdb3..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 TimelineItemPresenterFactoriesBindingContainer { - @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 be5bd5354c..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 VoiceMessagePresenterBindingContainer { - @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/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/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverBindingContainer.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverBindingContainer.kt index c9abbae0cf..a3796fad91 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverBindingContainer.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/di/RoomAliasResolverBindingContainer.kt @@ -20,7 +20,7 @@ import io.element.android.libraries.matrix.api.core.RoomAlias @ContributesTo(SessionScope::class) object RoomAliasResolverBindingContainer { @Provides - fun providesJoinRoomPresenterFactory( + fun providesRoomAliasResolverPresenterFactory( client: MatrixClient, ): RoomAliasResolverPresenter.Factory { return object : RoomAliasResolverPresenter.Factory { diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindingContainer.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindingContainer.kt index 5a5f13525a..6651e85097 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindingContainer.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindingContainer.kt @@ -23,7 +23,7 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom @ContributesTo(RoomScope::class) object RoomMemberBindingContainer { @Provides - fun provideRoomMemberDetailsPresenterFactory( + fun providesRoomMemberDetailsPresenterFactory( room: JoinedRoom, userProfilePresenterFactory: UserProfilePresenterFactory, encryptionService: EncryptionService, diff --git a/libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreBindingContainer.kt b/libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreBindingContainer.kt index d8531ac4d2..c28cc0601c 100644 --- a/libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreBindingContainer.kt +++ b/libraries/cachestore/impl/src/main/kotlin/io/element/android/libraries/cachestore/impl/di/CacheStoreBindingContainer.kt @@ -25,7 +25,7 @@ import timber.log.Timber 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/CryptographyBindingContainer.kt b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/di/CryptographyBindingContainer.kt similarity index 84% rename from libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/CryptographyBindingContainer.kt rename to libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/di/CryptographyBindingContainer.kt index 0cc2d616ea..bdfe6f9e5d 100644 --- a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/CryptographyBindingContainer.kt +++ b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/di/CryptographyBindingContainer.kt @@ -6,16 +6,15 @@ * 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 CryptographyBindingContainer { diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterBindingContainer.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterBindingContainer.kt index d052cbb2a0..ee8afe678f 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterBindingContainer.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/di/DateFormatterBindingContainer.kt @@ -27,5 +27,5 @@ object DateFormatterBindingContainer { fun providesLocale(): Locale = Locale.getDefault() @Provides - fun providesTimezone(): TimezoneProvider = TimezoneProvider { TimeZone.currentSystemDefault() } + fun providesTimezoneProvider(): TimezoneProvider = TimezoneProvider { TimeZone.currentSystemDefault() } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixBindingContainer.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixBindingContainer.kt index 621c4d6d46..f50c0a04cc 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixBindingContainer.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/di/SessionMatrixBindingContainer.kt @@ -56,7 +56,7 @@ object SessionMatrixBindingContainer { } @Provides - fun provideRoomMembershipObserver(matrixClient: MatrixClient): RoomMembershipObserver { + fun providesRoomMembershipObserver(matrixClient: MatrixClient): RoomMembershipObserver { return matrixClient.roomMembershipObserver } @@ -112,7 +112,7 @@ object SessionMatrixBindingContainer { } @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 96a7076bd5..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 SimplePlayerBindingContainer { - @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 cc8a6ce901..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 MediaItemPresenterFactoriesBindingContainer { - @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 0b35569e6c..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 VoiceMessagePresenterBindingContainer { - @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/NetworkBindingContainer.kt b/libraries/network/src/main/kotlin/io/element/android/libraries/network/di/NetworkBindingContainer.kt similarity index 97% rename from libraries/network/src/main/kotlin/io/element/android/libraries/network/NetworkBindingContainer.kt rename to libraries/network/src/main/kotlin/io/element/android/libraries/network/di/NetworkBindingContainer.kt index fbc09dc979..46f00a6b9b 100644 --- a/libraries/network/src/main/kotlin/io/element/android/libraries/network/NetworkBindingContainer.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 diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesBindingContainer.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/di/SessionPreferencesBindingContainer.kt similarity index 87% rename from libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesBindingContainer.kt rename to libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/di/SessionPreferencesBindingContainer.kt index 1176f4729c..396c3c7bc0 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/SessionPreferencesBindingContainer.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,6 +15,7 @@ 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 diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushBindingContainer.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushBindingContainer.kt index 0193bf1a57..2274232406 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushBindingContainer.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/di/PushBindingContainer.kt @@ -25,7 +25,7 @@ import io.element.android.libraries.push.impl.battery.BatteryOptimizationPresent 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/PushHistoryBindingContainer.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/di/PushHistoryBindingContainer.kt index 3dd71c391f..f50b221c58 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/di/PushHistoryBindingContainer.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/di/PushHistoryBindingContainer.kt @@ -26,7 +26,7 @@ import timber.log.Timber 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/SessionStorageBindingContainer.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageBindingContainer.kt index 4784dc95c7..e64268d608 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageBindingContainer.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/di/SessionStorageBindingContainer.kt @@ -26,7 +26,7 @@ import timber.log.Timber 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/VoiceRecorderBindingContainer.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/di/VoiceRecorderBindingContainer.kt index 1785d47bd1..3dd1b902fa 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/di/VoiceRecorderBindingContainer.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/di/VoiceRecorderBindingContainer.kt @@ -24,7 +24,7 @@ import io.element.android.opusencoder.OggOpusEncoder @ContributesTo(RoomScope::class) object VoiceRecorderBindingContainer { @Provides - fun provideAudioConfig(): AudioConfig { + fun providesAudioConfig(): AudioConfig { val sampleRate = SampleRate return AudioConfig( format = AudioFormat.Builder() @@ -40,7 +40,7 @@ object VoiceRecorderBindingContainer { } @Provides - public fun provideVoiceFileConfig(): VoiceFileConfig = + public fun providesVoiceFileConfig(): VoiceFileConfig = VoiceFileConfig( cacheSubdir = "voice_recordings", fileExt = "ogg", @@ -48,5 +48,5 @@ object VoiceRecorderBindingContainer { ) @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 4065ec9390..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 @@ -151,7 +151,7 @@ class DefaultVoiceRecorderTest { } private fun TestScope.createDefaultVoiceRecorder(): DefaultVoiceRecorder { - val fileConfig = VoiceRecorderBindingContainer.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/WorkManagerBindingContainer.kt b/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/di/WorkManagerBindingContainer.kt similarity index 93% rename from libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/WorkManagerBindingContainer.kt rename to libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/di/WorkManagerBindingContainer.kt index 976ac94805..65399112ef 100644 --- a/libraries/workmanager/impl/src/main/kotlin/io/element/android/libraries/workmanager/impl/WorkManagerBindingContainer.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 diff --git a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsBindingContainer.kt b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsBindingContainer.kt index d6c1064246..d411926529 100644 --- a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsBindingContainer.kt +++ b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/di/NoopAnalyticsBindingContainer.kt @@ -17,5 +17,5 @@ import io.element.android.libraries.di.identifiers.SentrySdkDsn @ContributesTo(AppScope::class) 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/SentryBindingContainer.kt b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryBindingContainer.kt index ed8b427bcc..9e1ca7b886 100644 --- a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryBindingContainer.kt +++ b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/di/SentryBindingContainer.kt @@ -19,8 +19,8 @@ import io.element.android.services.analyticsproviders.sentry.SentryConfig @ContributesTo(AppScope::class) 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/AppNavStateBindingContainer.kt b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/di/AppNavStateBindingContainer.kt index dbdf93c1b1..c7ffa7aab2 100644 --- a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/di/AppNavStateBindingContainer.kt +++ b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/di/AppNavStateBindingContainer.kt @@ -22,7 +22,7 @@ import io.element.android.services.appnavstate.impl.initializer.AppForegroundSta @ContributesTo(AppScope::class) 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/TimeBindingContainer.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/di/TimeBindingContainer.kt similarity index 84% rename from services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/TimeBindingContainer.kt rename to services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/di/TimeBindingContainer.kt index a557003bef..fad0e4a3ab 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/TimeBindingContainer.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 @@ -18,7 +18,7 @@ import kotlin.time.TimeSource @ContributesTo(AppScope::class) object TimeBindingContainer { @Provides - fun timeSource(): TimeSource { + fun providesTimeSource(): TimeSource { return TimeSource.Monotonic } }