From 92a4b8b66b93213eda3f8cebae42a9678ccf2b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Wed, 20 Aug 2025 15:29:50 +0200 Subject: [PATCH 01/13] Start migrating Anvil KSP to Metro --- .gitmodules | 3 - .../anvilannotations/ContributesNode.kt | 2 +- anvilcodegen/build.gradle.kts | 3 +- .../anvilcodegen/ContributesNodeProcessor.kt | 38 ++- .../element/android/x/ElementXApplication.kt | 6 +- .../kotlin/io/element/android/x/MainNode.kt | 2 +- .../io/element/android/x/di/AppBindings.kt | 4 +- .../io/element/android/x/di/AppComponent.kt | 22 +- .../io/element/android/x/di/AppModule.kt | 18 +- .../x/di/DefaultRoomComponentFactory.kt | 15 +- .../x/di/DefaultSessionComponentFactory.kt | 13 +- .../io/element/android/x/di/GlobalGraph.kt | 16 + .../io/element/android/x/di/GlobalScope.kt | 10 + .../io/element/android/x/di/RoomComponent.kt | 32 +- .../element/android/x/di/SessionComponent.kt | 27 +- .../android/x/intent/DefaultIntentProvider.kt | 9 +- .../x/oidc/DefaultOidcRedirectUrlProvider.kt | 9 +- .../appnav/LoggedInAppScopeFlowNode.kt | 9 +- .../android/appnav/LoggedInEventProcessor.kt | 5 +- .../android/appnav/LoggedInFlowNode.kt | 22 +- .../android/appnav/NotLoggedInFlowNode.kt | 9 +- .../io/element/android/appnav/RootFlowNode.kt | 9 +- .../android/appnav/di/MatrixSessionCache.kt | 11 +- .../android/appnav/di/SyncOrchestrator.kt | 9 +- .../android/appnav/intent/IntentResolver.kt | 5 +- .../android/appnav/loggedin/LoggedInNode.kt | 7 +- .../appnav/loggedin/LoggedInPresenter.kt | 5 +- .../loggedin/MediaPreviewConfigMigration.kt | 5 +- .../android/appnav/loggedin/SendQueues.kt | 7 +- .../android/appnav/room/RoomFlowNode.kt | 7 +- .../appnav/room/joined/JoinedRoomFlowNode.kt | 7 +- .../room/joined/JoinedRoomLoadedFlowNode.kt | 7 +- .../appnav/root/RootNavStateFlowFactory.kt | 5 +- .../android/appnav/root/RootPresenter.kt | 5 +- enterprise | 1 - .../analytics/impl/AnalyticsOptInNode.kt | 9 +- .../analytics/impl/AnalyticsOptInPresenter.kt | 5 +- .../impl/DefaultAnalyticsEntryPoint.kt | 9 +- .../analytics/impl/di/AnalyticsModule.kt | 10 +- .../AnalyticsPreferencesPresenter.kt | 5 +- .../cachecleaner/api/CacheCleanerBindings.kt | 4 +- .../cachecleaner/impl/DefaultCacheCleaner.kt | 12 +- .../call/impl/DefaultElementCallEntryPoint.kt | 11 +- .../features/call/impl/di/CallBindings.kt | 4 +- .../RingingCallNotificationCreator.kt | 7 +- .../impl/pip/PictureInPicturePresenter.kt | 5 +- .../call/impl/pip/PipSupportProvider.kt | 11 +- .../receivers/DeclineCallBroadcastReceiver.kt | 2 +- .../call/impl/ui/CallScreenPresenter.kt | 9 +- .../call/impl/ui/ElementCallActivity.kt | 2 +- .../call/impl/ui/IncomingCallActivity.kt | 2 +- .../call/impl/ui/LanguageTagProvider.kt | 9 +- .../call/impl/utils/ActiveCallManager.kt | 13 +- .../call/impl/utils/CallIntentDataParser.kt | 5 +- .../DefaultCallAnalyticCredentialsProvider.kt | 9 +- .../impl/utils/DefaultCallWidgetProvider.kt | 9 +- .../impl/utils/DefaultCurrentCallService.kt | 11 +- .../impl/ChangeRolesNode.kt | 7 +- .../impl/ChangeRolesPresenter.kt | 9 +- .../impl/ChangeRoomMemberRolesRootNode.kt | 7 +- .../DefaultChangeRoomMemberRolesEntyPoint.kt | 7 +- .../impl/RoomMemberListDataSource.kt | 5 +- .../createroom/impl/CreateRoomFlowNode.kt | 7 +- .../impl/DefaultCreateRoomEntryPoint.kt | 7 +- .../impl/addpeople/AddPeopleNode.kt | 7 +- .../impl/configureroom/ConfigureRoomNode.kt | 7 +- .../configureroom/ConfigureRoomPresenter.kt | 5 +- .../configureroom/CreateRoomConfigStore.kt | 5 +- .../logout/impl/AccountDeactivationNode.kt | 7 +- .../impl/AccountDeactivationPresenter.kt | 5 +- .../DefaultAccountDeactivationEntryPoint.kt | 9 +- .../impl/DefaultEnterpriseService.kt | 9 +- .../impl/DefaultSessionEnterpriseService.kt | 7 +- .../ftue/impl/DefaultFtueEntryPoint.kt | 9 +- .../features/ftue/impl/FtueFlowNode.kt | 31 +- .../features/ftue/impl/di/FtueModule.kt | 8 +- .../notifications/NotificationsOptInNode.kt | 9 +- .../NotificationsOptInPresenter.kt | 9 +- .../FtueSessionVerificationFlowNode.kt | 7 +- .../ChooseSelfVerificationModeNode.kt | 7 +- .../ChooseSelfVerificationModePresenter.kt | 5 +- .../ftue/impl/state/DefaultFtueService.kt | 9 +- .../home/impl/DefaultHomeEntryPoint.kt | 9 +- .../features/home/impl/HomeFlowNode.kt | 7 +- .../features/home/impl/HomePresenter.kt | 5 +- .../impl/datasource/RoomListDataSource.kt | 5 +- .../datasource/RoomListRoomSummaryFactory.kt | 5 +- .../features/home/impl/di/RoomListModule.kt | 8 +- .../impl/filters/RoomListFiltersPresenter.kt | 5 +- .../DefaultFilterSelectionStrategy.kt | 7 +- .../home/impl/roomlist/RoomListPresenter.kt | 5 +- .../impl/search/RoomListSearchDataSource.kt | 5 +- .../impl/search/RoomListSearchPresenter.kt | 5 +- .../features/invite/impl/AcceptInvite.kt | 7 +- .../features/invite/impl/DeclineInvite.kt | 7 +- .../impl/DefaultSeenInvitesStoreFactory.kt | 13 +- .../AcceptDeclineInvitePresenter.kt | 5 +- .../DefaultAcceptDeclineInviteView.kt | 7 +- .../declineandblock/DeclineAndBlockNode.kt | 23 +- .../DeclineAndBlockPresenter.kt | 131 ++++---- .../DefaultDeclineAndBlockEntryPoint.kt | 9 +- .../features/invite/impl/di/InviteModule.kt | 10 +- .../impl/DefaultInvitePeoplePresenter.kt | 11 +- .../impl/DefaultInvitePeopleRenderer.kt | 7 +- .../impl/DefaultJoinRoomEntryPoint.kt | 9 +- .../joinroom/impl/JoinRoomFlowNode.kt | 7 +- .../joinroom/impl/JoinRoomPresenter.kt | 7 +- .../joinroom/impl/di/CancelKnockRoom.kt | 7 +- .../features/joinroom/impl/di/ForgetRoom.kt | 7 +- .../joinroom/impl/di/JoinRoomModule.kt | 8 +- .../features/joinroom/impl/di/KnockRoom.kt | 7 +- .../DefaultKnockRequestsBannerRenderer.kt | 7 +- .../banner/KnockRequestsBannerPresenter.kt | 5 +- .../impl/data/KnockRequestsModule.kt | 10 +- .../DefaultKnockRequestsListEntryPoint.kt | 9 +- .../impl/list/KnockRequestsListNode.kt | 7 +- .../impl/list/KnockRequestsListPresenter.kt | 5 +- .../impl/InternalLeaveRoomRenderer.kt | 7 +- .../leaveroom/impl/LeaveRoomPresenter.kt | 5 +- .../leaveroom/impl/di/LeaveRoomModule.kt | 8 +- .../DefaultOpenSourcesLicensesEntryPoint.kt | 9 +- .../licenses/impl/DependenciesFlowNode.kt | 9 +- .../licenses/impl/LicensesProvider.kt | 11 +- .../impl/details/DependenciesDetailsNode.kt | 9 +- .../impl/list/DependencyLicensesListNode.kt | 9 +- .../list/DependencyLicensesListPresenter.kt | 5 +- .../location/impl/DefaultLocationService.kt | 9 +- .../common/actions/AndroidLocationActions.kt | 11 +- .../DefaultPermissionsPresenter.kt | 13 +- .../send/DefaultSendLocationEntryPoint.kt | 9 +- .../location/impl/send/SendLocationNode.kt | 7 +- .../impl/send/SendLocationPresenter.kt | 9 +- .../show/DefaultShowLocationEntryPoint.kt | 9 +- .../location/impl/show/ShowLocationNode.kt | 7 +- .../impl/show/ShowLocationPresenter.kt | 9 +- .../impl/DefaultLockScreenEntryPoint.kt | 9 +- .../impl/DefaultLockScreenService.kt | 11 +- .../lockscreen/impl/LockScreenConfig.kt | 10 +- .../lockscreen/impl/LockScreenFlowNode.kt | 7 +- .../DefaultBiometricAuthenticatorManager.kt | 13 +- .../impl/pin/DefaultPinCodeManager.kt | 11 +- .../settings/LockScreenSettingsFlowNode.kt | 7 +- .../impl/settings/LockScreenSettingsNode.kt | 7 +- .../settings/LockScreenSettingsPresenter.kt | 5 +- .../impl/setup/LockScreenSetupFlowNode.kt | 7 +- .../setup/biometric/SetupBiometricNode.kt | 7 +- .../biometric/SetupBiometricPresenter.kt | 5 +- .../lockscreen/impl/setup/pin/SetupPinNode.kt | 7 +- .../impl/setup/pin/SetupPinPresenter.kt | 5 +- .../impl/setup/pin/validation/PinValidator.kt | 5 +- .../storage/PreferencesLockScreenStore.kt | 9 +- .../lockscreen/impl/unlock/PinUnlockHelper.kt | 5 +- .../lockscreen/impl/unlock/PinUnlockNode.kt | 7 +- .../impl/unlock/PinUnlockPresenter.kt | 5 +- .../impl/unlock/activity/PinUnlockActivity.kt | 2 +- .../impl/unlock/di/PinUnlockBindings.kt | 4 +- .../login/impl/DefaultLoginEntryPoint.kt | 9 +- .../login/impl/DefaultLoginIntentResolver.kt | 9 +- .../login/impl/DefaultLoginUserStory.kt | 0 .../features/login/impl/LoginFlowNode.kt | 9 +- .../DefaultAccountProviderAccessControl.kt | 9 +- .../AccountProviderDataSource.kt | 9 +- .../changeserver/ChangeServerPresenter.kt | 5 +- .../features/login/impl/di/LoginModule.kt | 10 +- .../login/impl/di/QrCodeLoginBindings.kt | 2 +- .../login/impl/di/QrCodeLoginComponent.kt | 20 +- .../features/login/impl/login/LoginHelper.kt | 5 +- .../impl/qrcode/DefaultQrCodeLoginManager.kt | 9 +- .../login/impl/qrcode/QrCodeLoginFlowNode.kt | 13 +- .../login/impl/resolver/HomeserverResolver.kt | 5 +- .../ChangeAccountProviderNode.kt | 9 +- .../ChangeAccountProviderPresenter.kt | 5 +- .../ChooseAccountProviderNode.kt | 9 +- .../ChooseAccountProviderPresenter.kt | 5 +- .../ConfirmAccountProviderNode.kt | 9 +- .../ConfirmAccountProviderPresenter.kt | 9 +- .../createaccount/CreateAccountNode.kt | 9 +- .../createaccount/CreateAccountPresenter.kt | 9 +- .../screens/createaccount/MessageParser.kt | 9 +- .../loginpassword/LoginPasswordNode.kt | 9 +- .../loginpassword/LoginPasswordPresenter.kt | 5 +- .../impl/screens/onboarding/OnBoardingNode.kt | 9 +- .../screens/onboarding/OnBoardingPresenter.kt | 9 +- .../confirmation/QrCodeConfirmationNode.kt | 7 +- .../screens/qrcode/error/QrCodeErrorNode.kt | 7 +- .../screens/qrcode/intro/QrCodeIntroNode.kt | 7 +- .../qrcode/intro/QrCodeIntroPresenter.kt | 5 +- .../screens/qrcode/scan/QrCodeScanNode.kt | 7 +- .../qrcode/scan/QrCodeScanPresenter.kt | 5 +- .../SearchAccountProviderNode.kt | 9 +- .../SearchAccountProviderPresenter.kt | 5 +- .../WebClientUrlForAuthenticationRetriever.kt | 9 +- .../impl/di/FakeMergedQrCodeLoginComponent.kt | 4 +- .../logout/impl/DefaultLogoutEntryPoint.kt | 9 +- .../logout/impl/DefaultLogoutUseCase.kt | 9 +- .../features/logout/impl/LogoutNode.kt | 7 +- .../features/logout/impl/LogoutPresenter.kt | 5 +- .../features/logout/impl/di/LogoutModule.kt | 8 +- .../impl/direct/DefaultDirectLogoutView.kt | 7 +- .../impl/direct/DirectLogoutPresenter.kt | 5 +- .../impl/DefaultMessagesEntryPoint.kt | 17 +- .../messages/impl/MessagesFlowNode.kt | 7 +- .../features/messages/impl/MessagesNode.kt | 9 +- .../messages/impl/MessagesPresenter.kt | 9 +- .../impl/actionlist/ActionListPresenter.kt | 11 +- .../preview/AttachmentsPreviewNode.kt | 7 +- .../preview/AttachmentsPreviewPresenter.kt | 9 +- ...faultMediaOptimizationSelectorPresenter.kt | 11 +- .../video/VideoMetadataExtractor.kt | 15 +- .../identity/IdentityChangeStatePresenter.kt | 5 +- .../VerifiedUserSendFailureFactory.kt | 5 +- ...ResolveVerifiedUserSendFailurePresenter.kt | 5 +- .../messages/impl/di/MessagesBindsModule.kt | 8 +- .../impl/di/MessagesProvidesModule.kt | 8 +- .../impl/draft/DefaultComposerDraftService.kt | 7 +- .../impl/draft/MatrixComposerDraftStore.kt | 5 +- .../impl/draft/VolatileComposerDraftStore.kt | 5 +- .../impl/forward/ForwardMessagesNode.kt | 7 +- .../impl/forward/ForwardMessagesPresenter.kt | 9 +- .../messages/impl/link/LinkChecker.kt | 9 +- .../messages/impl/link/LinkPresenter.kt | 5 +- .../DefaultMessageComposerContext.kt | 9 +- .../MessageComposerPresenter.kt | 9 +- .../RichTextEditorStateFactory.kt | 9 +- .../RoomAliasSuggestionsDataSource.kt | 7 +- .../suggestions/SuggestionsProcessor.kt | 5 +- .../pinned/PinnedEventsTimelineProvider.kt | 7 +- .../banner/PinnedMessagesBannerItemFactory.kt | 5 +- .../banner/PinnedMessagesBannerPresenter.kt | 5 +- .../pinned/list/PinnedMessagesListNode.kt | 7 +- .../list/PinnedMessagesListPresenter.kt | 9 +- .../messages/impl/report/ReportMessageNode.kt | 7 +- .../impl/report/ReportMessagePresenter.kt | 9 +- .../impl/threads/ThreadedMessagesNode.kt | 9 +- .../timeline/DefaultHtmlConverterProvider.kt | 9 +- .../messages/impl/timeline/MarkAsFullyRead.kt | 7 +- .../impl/timeline/TimelineController.kt | 12 +- .../impl/timeline/TimelineItemIndexer.kt | 5 +- .../impl/timeline/TimelinePresenter.kt | 9 +- .../customreaction/CustomReactionPresenter.kt | 5 +- .../ReactionSummaryPresenter.kt | 5 +- .../ReadReceiptBottomSheetPresenter.kt | 5 +- .../impl/timeline/debug/EventDebugInfoNode.kt | 7 +- .../di/FakeTimelineItemPresenterFactories.kt | 2 +- .../messages/impl/timeline/di/LiveTimeline.kt | 2 +- .../di/TimelineItemEventContentKey.kt | 2 +- .../di/TimelineItemPresenterFactories.kt | 24 +- .../factories/TimelineItemsFactory.kt | 9 +- .../event/TimelineItemContentFactory.kt | 5 +- ...eItemContentFailedToParseMessageFactory.kt | 5 +- ...ineItemContentFailedToParseStateFactory.kt | 5 +- .../TimelineItemContentMessageFactory.kt | 5 +- .../event/TimelineItemContentPollFactory.kt | 5 +- ...TimelineItemContentProfileChangeFactory.kt | 5 +- .../TimelineItemContentRedactedFactory.kt | 5 +- ...imelineItemContentRoomMembershipFactory.kt | 5 +- .../event/TimelineItemContentStateFactory.kt | 5 +- .../TimelineItemContentStickerFactory.kt | 5 +- .../event/TimelineItemContentUTDFactory.kt | 5 +- .../event/TimelineItemEventFactory.kt | 9 +- .../TimelineItemDaySeparatorFactory.kt | 5 +- .../virtual/TimelineItemVirtualFactory.kt | 5 +- .../timeline/groups/TimelineItemGrouper.kt | 7 +- .../protection/TimelineProtectionPresenter.kt | 5 +- .../typing/TypingNotificationPresenter.kt | 5 +- .../impl/utils/TextPillificationHelper.kt | 7 +- .../DefaultMessageSummaryFormatter.kt | 9 +- .../DefaultVoiceMessageComposerPresenter.kt | 11 +- .../composer/VoiceMessageComposerPlayer.kt | 5 +- .../timeline/RedactedVoiceMessageManager.kt | 7 +- .../timeline/VoiceMessagePresenter.kt | 19 +- .../impl/DefaultMigrationEntryPoint.kt | 9 +- .../migration/impl/DefaultMigrationStore.kt | 9 +- .../migration/impl/MigrationPresenter.kt | 9 +- .../impl/migrations/AppMigration01.kt | 11 +- .../impl/migrations/AppMigration02.kt | 11 +- .../impl/migrations/AppMigration03.kt | 11 +- .../impl/migrations/AppMigration04.kt | 13 +- .../impl/migrations/AppMigration05.kt | 15 +- .../impl/migrations/AppMigration06.kt | 14 +- .../impl/migrations/AppMigration07.kt | 11 +- .../impl/DefaultNetworkMonitor.kt | 13 +- .../poll/impl/actions/DefaultEndPollAction.kt | 7 +- .../actions/DefaultSendPollResponseAction.kt | 7 +- .../poll/impl/create/CreatePollNode.kt | 7 +- .../poll/impl/create/CreatePollPresenter.kt | 9 +- .../create/DefaultCreatePollEntryPoint.kt | 9 +- .../features/poll/impl/data/PollRepository.kt | 9 +- .../history/DefaultPollHistoryEntryPoint.kt | 9 +- .../poll/impl/history/PollHistoryFlowNode.kt | 7 +- .../poll/impl/history/PollHistoryNode.kt | 7 +- .../poll/impl/history/PollHistoryPresenter.kt | 5 +- .../history/model/PollHistoryItemsFactory.kt | 5 +- .../model/DefaultPollContentStateFactory.kt | 7 +- .../preferences/impl/DefaultCacheService.kt | 11 +- .../impl/DefaultPreferencesEntryPoint.kt | 9 +- .../preferences/impl/PreferencesFlowNode.kt | 7 +- .../preferences/impl/about/AboutNode.kt | 7 +- .../preferences/impl/about/AboutPresenter.kt | 5 +- .../impl/advanced/AdvancedSettingsNode.kt | 7 +- .../advanced/AdvancedSettingsPresenter.kt | 5 +- .../advanced/MediaPreviewConfigStateStore.kt | 9 +- .../impl/analytics/AnalyticsSettingsNode.kt | 7 +- .../analytics/AnalyticsSettingsPresenter.kt | 5 +- .../impl/blockedusers/BlockedUsersNode.kt | 7 +- .../blockedusers/BlockedUsersPresenter.kt | 5 +- .../impl/developer/DeveloperSettingsNode.kt | 7 +- .../developer/DeveloperSettingsPresenter.kt | 5 +- .../notifications/NotificationSettingsNode.kt | 7 +- .../NotificationSettingsPresenter.kt | 5 +- .../SystemNotificationsEnabledProvider.kt | 11 +- .../EditDefaultNotificationSettingNode.kt | 7 +- ...EditDefaultNotificationSettingPresenter.kt | 9 +- .../impl/root/PreferencesRootNode.kt | 7 +- .../impl/root/PreferencesRootPresenter.kt | 5 +- .../preferences/impl/root/VersionFormatter.kt | 9 +- .../impl/tasks/ClearCacheUseCase.kt | 13 +- .../impl/tasks/ComputeCacheSizeUseCase.kt | 9 +- .../user/editprofile/EditUserProfileNode.kt | 7 +- .../editprofile/EditUserProfilePresenter.kt | 9 +- .../utils/ShowDeveloperSettingsProvider.kt | 5 +- .../DefaultRageshakeFeatureAvailability.kt | 9 +- .../rageshake/impl/bugreport/BugReportNode.kt | 9 +- .../impl/bugreport/BugReportPresenter.kt | 5 +- .../bugreport/DefaultBugReportEntryPoint.kt | 9 +- .../crash/DefaultCrashDetectionPresenter.kt | 9 +- .../impl/crash/PreferencesCrashDataStore.kt | 9 +- .../DefaultRageshakeDetectionPresenter.kt | 9 +- .../rageshake/impl/di/RageshakeModule.kt | 10 +- .../impl/logs/DefaultLogFilesRemover.kt | 9 +- .../DefaultRageshakePreferencesPresenter.kt | 9 +- .../impl/rageshake/DefaultRageShake.kt | 16 +- .../PreferencesRageshakeDataStore.kt | 9 +- .../impl/reporter/BugReportAppNameProvider.kt | 9 +- .../impl/reporter/DefaultBugReporter.kt | 17 +- .../reporter/DefaultBugReporterUrlProvider.kt | 9 +- .../screenshot/DefaultScreenshotHolder.kt | 13 +- .../impl/DefaultReportRoomEntryPoint.kt | 9 +- .../features/reportroom/impl/ReportRoom.kt | 7 +- .../reportroom/impl/ReportRoomNode.kt | 7 +- .../reportroom/impl/ReportRoomPresenter.kt | 9 +- .../DefaultRoomAliasResolverEntryPoint.kt | 9 +- .../impl/RoomAliasResolverNode.kt | 7 +- .../impl/RoomAliasResolverPresenter.kt | 7 +- .../impl/di/RoomAliasResolverModule.kt | 8 +- .../roomcall/impl/RoomCallStatePresenter.kt | 5 +- .../roomcall/impl/di/RoomCallModule.kt | 8 +- .../impl/DefaultRoomDetailsEntryPoint.kt | 9 +- .../roomdetails/impl/RoomDetailsFlowNode.kt | 7 +- .../roomdetails/impl/RoomDetailsNode.kt | 7 +- .../roomdetails/impl/RoomDetailsPresenter.kt | 5 +- .../roomdetails/impl/di/RoomMemberModule.kt | 8 +- .../impl/edit/RoomDetailsEditNode.kt | 7 +- .../impl/edit/RoomDetailsEditPresenter.kt | 5 +- .../impl/invite/RoomInviteMembersNode.kt | 7 +- .../impl/members/RoomMemberListDataSource.kt | 5 +- .../impl/members/RoomMemberListNode.kt | 7 +- .../impl/members/RoomMemberListPresenter.kt | 5 +- .../members/details/RoomMemberDetailsNode.kt | 7 +- .../details/RoomMemberDetailsPresenter.kt | 7 +- .../RoomNotificationSettingsNode.kt | 7 +- .../RoomNotificationSettingsPresenter.kt | 9 +- .../RolesAndPermissionsFlowNode.kt | 7 +- .../RolesAndPermissionsNode.kt | 7 +- .../RolesAndPermissionsPresenter.kt | 5 +- .../permissions/ChangeRoomPermissionsNode.kt | 7 +- .../ChangeRoomPermissionsPresenter.kt | 9 +- .../SecurityAndPrivacyFlowNode.kt | 7 +- .../SecurityAndPrivacyNode.kt | 7 +- .../SecurityAndPrivacyPresenter.kt | 9 +- .../editroomaddress/EditRoomAddressNode.kt | 7 +- .../EditRoomAddressPresenter.kt | 9 +- .../impl/DefaultRoomDirectoryEntryPoint.kt | 9 +- .../impl/root/RoomDirectoryNode.kt | 7 +- .../impl/root/RoomDirectoryPresenter.kt | 5 +- .../DefaultRoomMemberModerationRenderer.kt | 7 +- .../impl/RoomMemberModerationPresenter.kt | 5 +- .../impl/di/RoomMemberModerationModule.kt | 8 +- .../impl/DefaultSecureBackupEntryPoint.kt | 9 +- .../securebackup/impl/SecureBackupFlowNode.kt | 7 +- .../impl/disable/SecureBackupDisableNode.kt | 7 +- .../disable/SecureBackupDisablePresenter.kt | 5 +- .../enter/SecureBackupEnterRecoveryKeyNode.kt | 7 +- .../SecureBackupEnterRecoveryKeyPresenter.kt | 5 +- .../impl/reset/ResetIdentityFlowManager.kt | 5 +- .../impl/reset/ResetIdentityFlowNode.kt | 7 +- .../password/ResetIdentityPasswordNode.kt | 7 +- .../impl/reset/root/ResetIdentityRootNode.kt | 7 +- .../impl/root/SecureBackupRootNode.kt | 7 +- .../impl/root/SecureBackupRootPresenter.kt | 5 +- .../impl/setup/SecureBackupSetupNode.kt | 7 +- .../impl/setup/SecureBackupSetupPresenter.kt | 9 +- .../setup/SecureBackupSetupStateMachine.kt | 5 +- .../impl/tools/RecoveryKeyTools.kt | 5 +- .../share/impl/DefaultShareEntryPoint.kt | 7 +- .../features/share/impl/ShareIntentHandler.kt | 11 +- .../android/features/share/impl/ShareNode.kt | 7 +- .../features/share/impl/SharePresenter.kt | 9 +- .../impl/DefaultSignedOutEntryPoint.kt | 9 +- .../features/signedout/impl/SignedOutNode.kt | 9 +- .../signedout/impl/SignedOutPresenter.kt | 9 +- .../impl/DefaultStartChatEntryPoint.kt | 9 +- .../startchat/impl/DefaultStartDMAction.kt | 7 +- .../startchat/impl/StartChatFlowNode.kt | 7 +- .../joinbyaddress/JoinRoomByAddressNode.kt | 7 +- .../JoinRoomByAddressPresenter.kt | 9 +- .../startchat/impl/root/StartChatNode.kt | 7 +- .../startchat/impl/root/StartChatPresenter.kt | 5 +- .../impl/userlist/DefaultUserListPresenter.kt | 11 +- .../impl/userlist/UserListDataStore.kt | 5 +- .../impl/DefaultUserProfileEntryPoint.kt | 9 +- .../DefaultUserProfilePresenterFactory.kt | 7 +- .../userprofile/impl/UserProfileFlowNode.kt | 7 +- .../userprofile/impl/root/UserProfileNode.kt | 7 +- .../impl/root/UserProfilePresenter.kt | 9 +- .../DefaultIncomingVerificationEntryPoint.kt | 9 +- .../impl/incoming/IncomingVerificationNode.kt | 7 +- .../incoming/IncomingVerificationPresenter.kt | 9 +- .../IncomingVerificationStateMachine.kt | 5 +- .../DefaultOutgoingVerificationEntryPoint.kt | 9 +- .../impl/outgoing/OutgoingVerificationNode.kt | 33 +- .../outgoing/OutgoingVerificationPresenter.kt | 293 +++++++++--------- .../viewfolder/impl/DefaultTextFileViewer.kt | 9 +- .../impl/DefaultViewFolderEntryPoint.kt | 9 +- .../viewfolder/impl/file/FileContentReader.kt | 9 +- .../features/viewfolder/impl/file/FileSave.kt | 11 +- .../viewfolder/impl/file/FileShare.kt | 11 +- .../viewfolder/impl/file/ViewFileNode.kt | 9 +- .../viewfolder/impl/file/ViewFilePresenter.kt | 9 +- .../viewfolder/impl/folder/FolderExplorer.kt | 9 +- .../viewfolder/impl/folder/ViewFolderNode.kt | 33 +- .../impl/folder/ViewFolderPresenter.kt | 57 ++-- .../impl/root/ViewFolderRootNode.kt | 9 +- gradle/libs.versions.toml | 5 + .../clipboard/AndroidClipboardHelper.kt | 13 +- .../androidutils/file/TemporaryUriDeleter.kt | 11 +- .../filesize/AndroidFileSizeFormatter.kt | 11 +- .../androidutils/system/DateTimeObserver.kt | 13 +- libraries/architecture/build.gradle.kts | 6 +- .../libraries/architecture/NodeFactories.kt | 13 +- .../android/libraries/architecture/NodeKey.kt | 4 +- .../libraries/audio/impl/DefaultAudioFocus.kt | 11 +- .../impl/AESEncryptionDecryptionService.kt | 9 +- .../cryptography/impl/CryptographyModule.kt | 10 +- .../impl/KeyStoreSecretKeyRepository.kt | 9 +- .../dateformatter/impl/DateFormatterDay.kt | 9 +- .../dateformatter/impl/DateFormatterFull.kt | 5 +- .../dateformatter/impl/DateFormatterMonth.kt | 5 +- .../dateformatter/impl/DateFormatterTime.kt | 5 +- .../impl/DateFormatterTimeOnly.kt | 5 +- .../dateformatter/impl/DateFormatters.kt | 9 +- .../impl/DefaultDateFormatter.kt | 9 +- .../impl/LocalDateTimeProvider.kt | 5 +- .../impl/LocaleChangeObserver.kt | 13 +- .../impl/di/DateFormatterModule.kt | 10 +- .../deeplink/impl/DefaultDeepLinkCreator.kt | 6 +- .../deeplink/impl/DefaultDeeplinkParser.kt | 9 +- .../usecase/DefaultInviteFriendsUseCase.kt | 7 +- libraries/di/build.gradle.kts | 1 + .../android/libraries/di/BaseDirectory.kt | 27 ++ .../android/libraries/di/CacheDirectory.kt | 13 +- .../element/android/libraries/di/SingleIn.kt | 15 - .../di/annotations/AppCoroutineScope.kt | 2 +- .../{ => annotations}/ApplicationContext.kt | 6 +- .../di/annotations/SessionCoroutineScope.kt | 2 +- .../DefaultPinnedMessagesBannerFormatter.kt | 7 +- .../impl/DefaultRoomLastMessageFormatter.kt | 7 +- .../impl/DefaultTimelineEventFormatter.kt | 7 +- .../impl/ProfileChangeContentFormatter.kt | 5 +- .../impl/RoomMembershipContentFormatter.kt | 5 +- .../impl/StateContentFormatter.kt | 5 +- .../impl/DefaultFeatureFlagService.kt | 11 +- .../impl/PreferencesFeatureFlagProvider.kt | 5 +- .../featureflag/impl/di/FeatureFlagModule.kt | 10 +- .../FullScreenIntentPermissionsPresenter.kt | 8 +- .../impl/di/FullScreenIntentModule.kt | 10 +- .../indicator/impl/DefaultIndicatorService.kt | 7 +- .../libraries/matrix/api/mxc/MxcTools.kt | 5 +- .../matrix/api/user/CurrentSessionIdHolder.kt | 7 +- .../matrix/impl/ClientBuilderProvider.kt | 9 +- .../matrix/impl/RustMatrixClientFactory.kt | 11 +- .../libraries/matrix/impl/RustSdkMetadata.kt | 9 +- .../impl/auth/OidcConfigurationProvider.kt | 5 +- .../auth/RustMatrixAuthenticationService.kt | 11 +- .../qrlogin/RustQrCodeLoginDataFactory.kt | 9 +- .../DefaultUserCertificatesProvider.kt | 9 +- .../matrix/impl/di/SessionMatrixModule.kt | 8 +- .../impl/keys/DefaultPassphraseGenerator.kt | 9 +- .../matrix/impl/paths/SessionPathsFactory.kt | 11 +- .../permalink/DefaultMatrixToConverter.kt | 9 +- .../impl/permalink/DefaultPermalinkBuilder.kt | 9 +- .../impl/permalink/DefaultPermalinkParser.kt | 9 +- .../impl/platform/RustInitPlatformService.kt | 9 +- .../matrix/impl/proxy/DefaultProxyProvider.kt | 11 +- .../room/TimelineEventTypeFilterFactory.kt | 9 +- .../impl/room/alias/DefaultRoomAliasHelper.kt | 9 +- .../matrix/impl/room/join/DefaultJoinRoom.kt | 7 +- .../impl/server/DefaultUserServerResolver.kt | 7 +- .../matrix/impl/tracing/RustTracingService.kt | 9 +- .../DefaultCallWidgetSettingsProvider.kt | 9 +- .../matrix/ui/media/ImageLoaderFactories.kt | 20 +- .../matrix/ui/media/ImageLoaderHolder.kt | 11 +- .../ui/messages/RoomMemberProfilesCache.kt | 7 +- .../matrix/ui/messages/RoomNamesCache.kt | 7 +- .../matrix/ui/room/LoadingRoomState.kt | 5 +- .../impl/DefaultPickerProvider.kt | 11 +- .../mediaplayer/impl/DefaultMediaPlayer.kt | 9 +- .../mediaplayer/impl/SimplePlayer.kt | 10 +- .../mediaupload/api/MaxUploadSizeProvider.kt | 5 +- .../libraries/mediaupload/api/MediaSender.kt | 9 +- .../impl/AndroidMediaPreProcessor.kt | 11 +- .../DefaultMediaOptimizationConfigProvider.kt | 7 +- .../mediaupload/impl/ImageCompressor.kt | 7 +- .../mediaupload/impl/ThumbnailFactory.kt | 7 +- .../mediaupload/impl/VideoCompressor.kt | 7 +- .../impl/DefaultMediaGalleryEntryPoint.kt | 9 +- .../impl/DefaultMediaViewerEntryPoint.kt | 9 +- .../impl/datasource/EventItemFactory.kt | 5 +- ...edTimelineMediaGalleryDataSourceFactory.kt | 7 +- .../impl/datasource/MediaGalleryDataSource.kt | 9 +- .../datasource/MediaItemsPostProcessor.kt | 5 +- .../impl/datasource/MediaTimeline.kt | 9 +- .../datasource/TimelineMediaItemsFactory.kt | 5 +- .../impl/datasource/VirtualItemFactory.kt | 5 +- .../impl/gallery/MediaGalleryNode.kt | 7 +- .../impl/gallery/MediaGalleryPresenter.kt | 9 +- .../di/FakeTimelineItemPresenterFactories.kt | 2 +- .../gallery/di/MediaItemEventContentKey.kt | 2 +- .../gallery/di/MediaItemPresenterFactories.kt | 24 +- .../impl/gallery/root/MediaGalleryRootNode.kt | 7 +- .../gallery/voice/VoiceMessagePresenter.kt | 19 +- .../impl/local/AndroidLocalMediaActions.kt | 11 +- .../impl/local/AndroidLocalMediaFactory.kt | 11 +- .../impl/local/DefaultLocalMediaRenderer.kt | 9 +- .../FileExtensionExtractorWithValidation.kt | 9 +- .../impl/viewer/MediaViewerNode.kt | 7 +- .../impl/viewer/MediaViewerPresenter.kt | 9 +- .../impl/viewer/PagerKeysHandler.kt | 5 +- .../libraries/network/NetworkModule.kt | 12 +- .../libraries/network/RetrofitFactory.kt | 11 +- .../interceptors/UserAgentInterceptor.kt | 5 +- .../useragent/DefaultUserAgentProvider.kt | 11 +- .../oidc/impl/DefaultOidcActionFlow.kt | 11 +- .../oidc/impl/DefaultOidcIntentResolver.kt | 9 +- .../libraries/oidc/impl/OidcUrlParser.kt | 9 +- .../AccompanistPermissionStateProvider.kt | 9 +- .../impl/DefaultPermissionStateProvider.kt | 13 +- .../impl/DefaultPermissionsPresenter.kt | 13 +- .../impl/DefaultPermissionsStore.kt | 9 +- .../impl/action/AndroidPermissionActions.kt | 11 +- ...ficationTroubleshootCheckPermissionTest.kt | 11 +- .../impl/store/DefaultAppPreferencesStore.kt | 9 +- .../DefaultPreferencesDataStoreFactory.kt | 11 +- .../DefaultSessionPreferencesStoreFactory.kt | 13 +- .../impl/store/SessionPreferencesModule.kt | 8 +- .../impl/DefaultGetCurrentPushProvider.kt | 9 +- .../libraries/push/impl/DefaultPushService.kt | 14 +- .../push/impl/DefaultPusherSubscriber.kt | 9 +- .../push/impl/battery/BatteryOptimization.kt | 11 +- .../battery/BatteryOptimizationPresenter.kt | 5 +- .../libraries/push/impl/di/PushModule.kt | 14 +- .../impl/history/DefaultPushHistoryService.kt | 11 +- .../push/impl/history/di/PushHistoryModule.kt | 14 +- .../ActiveNotificationsProvider.kt | 9 +- .../CallNotificationEventResolver.kt | 9 +- .../DefaultNotifiableEventResolver.kt | 13 +- .../DefaultNotificationBitmapLoader.kt | 11 +- .../DefaultNotificationDrawerManager.kt | 11 +- .../DefaultOnMissedCallNotificationHandler.kt | 9 +- .../FallbackNotificationFactory.kt | 5 +- .../notifications/NotificationActionIds.kt | 5 +- .../NotificationBroadcastReceiver.kt | 2 +- .../NotificationBroadcastReceiverBindings.kt | 4 +- .../NotificationBroadcastReceiverHandler.kt | 5 +- .../notifications/NotificationDataFactory.kt | 9 +- .../notifications/NotificationDisplayer.kt | 11 +- .../notifications/NotificationMediaRepo.kt | 16 +- .../notifications/NotificationRenderer.kt | 5 +- .../NotificationResolverQueue.kt | 9 +- .../notifications/ReplyMessageExtractor.kt | 9 +- .../notifications/RoomGroupMessageCreator.kt | 9 +- .../SummaryGroupMessageCreator.kt | 9 +- .../notifications/TestNotificationReceiver.kt | 2 +- .../TestNotificationReceiverBinding.kt | 4 +- .../channels/NotificationChannels.kt | 11 +- .../DefaultNotificationConversationService.kt | 13 +- .../factories/NotificationCreator.kt | 11 +- .../factories/PendingIntentFactory.kt | 7 +- .../action/AcceptInvitationActionFactory.kt | 7 +- .../action/MarkAsReadActionFactory.kt | 7 +- .../action/QuickReplyActionFactory.kt | 7 +- .../action/RejectInvitationActionFactory.kt | 7 +- .../push/impl/push/DefaultPushHandler.kt | 11 +- .../push/impl/push/IncrementPushDataStore.kt | 9 +- .../push/MutableBatteryOptimizationStore.kt | 9 +- .../impl/push/OnNotifiableEventReceived.kt | 9 +- .../push/impl/push/OnRedactedEventReceived.kt | 11 +- .../push/impl/push/SyncOnNotifiableEvent.kt | 5 +- .../impl/pushgateway/PushGatewayApiFactory.kt | 9 +- .../pushgateway/PushGatewayNotifyRequest.kt | 9 +- .../push/impl/store/DefaultPushDataStore.kt | 9 +- .../libraries/push/impl/test/TestPush.kt | 9 +- .../troubleshoot/CurrentPushProviderTest.kt | 11 +- .../troubleshoot/DiagnosticPushHandler.kt | 9 +- .../troubleshoot/NotificationClickHandler.kt | 9 +- .../impl/troubleshoot/NotificationTest.kt | 11 +- .../impl/troubleshoot/PushLoopbackTest.kt | 11 +- .../impl/troubleshoot/PushProvidersTest.kt | 11 +- .../firebase/FirebaseGatewayProvider.kt | 9 +- .../firebase/FirebaseNewTokenHandler.kt | 9 +- .../firebase/FirebasePushParser.kt | 5 +- .../firebase/FirebasePushProvider.kt | 11 +- .../pushproviders/firebase/FirebaseStore.kt | 9 +- .../firebase/FirebaseTokenDeleter.kt | 9 +- .../firebase/FirebaseTokenGetter.kt | 9 +- .../firebase/FirebaseTokenRotator.kt | 9 +- .../firebase/FirebaseTroubleshooter.kt | 9 +- .../firebase/IsPlayServiceAvailable.kt | 11 +- .../VectorFirebaseMessagingService.kt | 2 +- .../VectorFirebaseMessagingServiceBindings.kt | 4 +- .../troubleshoot/FirebaseAvailabilityTest.kt | 11 +- .../troubleshoot/FirebaseTokenTest.kt | 11 +- .../DefaultPushGatewayHttpUrlProvider.kt | 9 +- .../unifiedpush/GuardServiceStarter.kt | 9 +- .../unifiedpush/RegisterUnifiedPushUseCase.kt | 11 +- .../unifiedpush/UnifiedPushApiFactory.kt | 9 +- ...nifiedPushCurrentUserPushConfigProvider.kt | 9 +- .../UnifiedPushDistributorProvider.kt | 11 +- .../unifiedpush/UnifiedPushGatewayResolver.kt | 9 +- .../UnifiedPushGatewayUrlResolver.kt | 9 +- .../UnifiedPushNewGatewayHandler.kt | 9 +- .../unifiedpush/UnifiedPushParser.kt | 5 +- .../unifiedpush/UnifiedPushProvider.kt | 11 +- .../unifiedpush/UnifiedPushStore.kt | 11 +- .../UnregisterUnifiedPushUseCase.kt | 11 +- .../VectorUnifiedPushMessagingReceiver.kt | 5 +- ...torUnifiedPushMessagingReceiverBindings.kt | 6 +- .../EndpointRegistrationHandler.kt | 9 +- .../OpenDistributorWebPageAction.kt | 11 +- .../UnifiedPushMatrixGatewayTest.kt | 11 +- .../troubleshoot/UnifiedPushTest.kt | 11 +- .../impl/DefaultUserPushStoreFactory.kt | 13 +- .../DataStorePushClientSecretStore.kt | 9 +- .../clientsecret/DefaultPushClientSecret.kt | 9 +- .../DefaultPushClientSecretFactory.kt | 9 +- .../impl/DefaultRoomSelectEntryPoint.kt | 7 +- .../roomselect/impl/RoomSelectNode.kt | 7 +- .../roomselect/impl/RoomSelectPresenter.kt | 9 +- .../impl/RoomSelectSearchDataSource.kt | 5 +- .../impl/DatabaseSessionStore.kt | 11 +- .../impl/di/SessionStorageModule.kt | 14 +- .../impl/observer/DefaultSessionObserver.kt | 11 +- .../mentions/MentionSpanFormatter.kt | 7 +- .../mentions/MentionSpanProvider.kt | 5 +- .../textcomposer/mentions/MentionSpanTheme.kt | 4 +- .../mentions/MentionSpanUpdater.kt | 7 +- ...faultNotificationTroubleShootEntryPoint.kt | 9 +- .../impl/TroubleshootNotificationsNode.kt | 7 +- .../TroubleshootNotificationsPresenter.kt | 5 +- .../impl/TroubleshootTestSuite.kt | 5 +- .../history/DefaultPushHistoryEntryPoint.kt | 9 +- .../impl/history/PushHistoryNode.kt | 7 +- .../impl/history/PushHistoryPresenter.kt | 5 +- .../impl/MatrixUserListDataSource.kt | 7 +- .../usersearch/impl/MatrixUserRepository.kt | 7 +- .../DefaultVoiceMessagePresenterFactory.kt | 7 +- .../voiceplayer/impl/VoiceMessageMediaRepo.kt | 14 +- .../voiceplayer/impl/VoiceMessagePlayer.kt | 9 +- .../impl/DefaultVoiceRecorder.kt | 9 +- .../impl/audio/AndroidAudioReader.kt | 2 +- .../impl/audio/DBovAudioLevelCalculator.kt | 7 +- .../impl/audio/DefaultEncoder.kt | 11 +- .../impl/di/VoiceRecorderModule.kt | 8 +- .../impl/file/DefaultVoiceFileManager.kt | 10 +- .../impl/DefaultSessionWellknownRetriever.kt | 7 +- .../impl/DefaultWellknownRetriever.kt | 9 +- plugins/build.gradle.kts | 2 + plugins/settings.gradle.kts | 1 + .../main/kotlin/extension/AnvilExtensions.kt | 46 +-- .../analytics/impl/DefaultAnalyticsService.kt | 14 +- .../analytics/impl/DefaultScreenTracker.kt | 9 +- .../analytics/impl/store/AnalyticsStore.kt | 9 +- .../analytics/noop/NoopAnalyticsService.kt | 11 +- .../analytics/noop/NoopScreenTracker.kt | 9 +- .../posthog/PostHogFactory.kt | 7 +- .../posthog/PosthogAnalyticsProvider.kt | 11 +- .../posthog/PosthogEndpointConfigProvider.kt | 5 +- .../sentry/SentryAnalyticsProvider.kt | 15 +- .../impl/DefaultAppErrorStateService.kt | 11 +- services/appnavstate/api/build.gradle.kts | 4 + .../appnavstate/api/ActiveRoomsHolder.kt | 9 +- .../impl/DefaultAppNavigationStateService.kt | 11 +- .../appnavstate/impl/di/AppNavStateModule.kt | 12 +- .../intent/DefaultExternalIntentLauncher.kt | 11 +- .../sdk/DefaultBuildVersionSdkIntProvider.kt | 9 +- .../impl/strings/AndroidStringProvider.kt | 9 +- .../impl/systemclock/DefaultSystemClock.kt | 9 +- .../toolbox/impl/systemclock/TimeModule.kt | 10 +- settings.gradle.kts | 2 + ...te Module Feature Entry Point Flow Impl.kt | 9 +- .../Template Module Feature Node Flow Impl.kt | 9 +- .../Template Presentation Classes.kt | 5 +- ...emplate Presentation Classes.kt.child.1.kt | 9 +- 703 files changed, 3523 insertions(+), 2820 deletions(-) create mode 100644 app/src/main/kotlin/io/element/android/x/di/GlobalGraph.kt create mode 100644 app/src/main/kotlin/io/element/android/x/di/GlobalScope.kt delete mode 160000 enterprise create mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt create mode 100644 libraries/di/src/main/kotlin/io/element/android/libraries/di/BaseDirectory.kt delete mode 100644 libraries/di/src/main/kotlin/io/element/android/libraries/di/SingleIn.kt rename libraries/di/src/main/kotlin/io/element/android/libraries/di/{ => annotations}/ApplicationContext.kt (73%) diff --git a/.gitmodules b/.gitmodules index aa54a9d8ae..e69de29bb2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "enterprise"] - path = enterprise - url = git@github.com:element-hq/element-android-enterprise.git diff --git a/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt b/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt index d91a4761fc..446c33fd67 100644 --- a/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt +++ b/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt @@ -13,7 +13,7 @@ import kotlin.reflect.KClass * Adds Node to the specified component graph. * Equivalent to the following declaration: * - * @Module + * @BindingContainer * @ContributesTo(Scope::class) * abstract class YourNodeModule { diff --git a/anvilcodegen/build.gradle.kts b/anvilcodegen/build.gradle.kts index 6f73bd9f44..9c4b192ed6 100644 --- a/anvilcodegen/build.gradle.kts +++ b/anvilcodegen/build.gradle.kts @@ -11,10 +11,9 @@ plugins { dependencies { implementation(projects.anvilannotations) - api(libs.anvil.compiler.api) implementation(libs.anvil.compiler.utils) + implementation(libs.metro.runtime) implementation(libs.kotlinpoet) - implementation(libs.dagger) implementation(libs.ksp.plugin) implementation(libs.kotlinpoet.ksp) } diff --git a/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt index 2511e0008d..dcbcfb6547 100644 --- a/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt +++ b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt @@ -19,7 +19,6 @@ import com.google.devtools.ksp.symbol.KSAnnotated import com.google.devtools.ksp.symbol.KSClassDeclaration import com.google.devtools.ksp.symbol.KSType import com.google.devtools.ksp.validate -import com.squareup.anvil.annotations.ContributesTo import com.squareup.kotlinpoet.AnnotationSpec import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.FileSpec @@ -30,12 +29,12 @@ import com.squareup.kotlinpoet.STAR import com.squareup.kotlinpoet.TypeSpec import com.squareup.kotlinpoet.ksp.toTypeName import com.squareup.kotlinpoet.ksp.writeTo -import dagger.Binds -import dagger.Module -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject -import dagger.multibindings.IntoMap +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.IntoMap import io.element.android.anvilannotations.ContributesNode import org.jetbrains.kotlin.name.FqName @@ -57,9 +56,9 @@ class ContributesNodeProcessor( if (validSymbols.isEmpty()) return invalidSymbols for (ksClass in validSymbols) { - if (config.enableLogging) { +// if (config.enableLogging) { logger.warn("Processing ${ksClass.qualifiedName?.asString()}") - } +// } generateModule(ksClass) generateFactory(ksClass) } @@ -77,9 +76,8 @@ class ContributesNodeProcessor( fileName = moduleClassName, ) .addType( - TypeSpec.classBuilder(moduleClassName) - .addModifiers(KModifier.ABSTRACT) - .addAnnotation(Module::class) + TypeSpec.interfaceBuilder(moduleClassName) + .addAnnotation(BindingContainer::class) .addAnnotation(AnnotationSpec.builder(ContributesTo::class).addMember("%T::class", scope.toTypeName()).build()) .addFunction( FunSpec.builder("bind${ksClass.simpleName.asString()}Factory") @@ -103,7 +101,7 @@ class ContributesNodeProcessor( content.writeTo( codeGenerator = codeGenerator, dependencies = Dependencies( - aggregating = true, + aggregating = false, ksClass.containingFile!! ), ) @@ -113,23 +111,23 @@ class ContributesNodeProcessor( private fun generateFactory(ksClass: KSClassDeclaration) { val generatedPackage = ksClass.packageName.asString() val assistedFactoryClassName = "${ksClass.simpleName.asString()}_AssistedFactory" - val constructor = ksClass.getConstructors().singleOrNull { it.isAnnotationPresent(AssistedInject::class) } - val assistedParameters = constructor?.parameters?.filter { it.isAnnotationPresent(Assisted::class) }.orEmpty() - if (constructor == null || assistedParameters.size != 2) { + val constructor = ksClass.getConstructors().first { it.parameters.isNotEmpty() } + val assistedParameters = constructor.parameters.filter { it.isAnnotationPresent(Assisted::class) } + if (assistedParameters.size != 2) { error( - "${ksClass.qualifiedName} must have an @AssistedInject constructor with 2 @Assisted parameters", + "${ksClass.qualifiedName?.asString()} must have an @Inject constructor with 2 @Assisted parameters. Found: ${assistedParameters.size}", ) } val contextAssistedParam = assistedParameters[0] if (contextAssistedParam.name?.asString() != "buildContext") { error( - "${ksClass.qualifiedName} @Assisted parameter must be named buildContext", + "${ksClass.qualifiedName?.asString()} @Assisted parameter must be named buildContext", ) } val pluginsAssistedParam = assistedParameters[1] if (pluginsAssistedParam.name?.asString() != "plugins") { error( - "${ksClass.qualifiedName} @Assisted parameter must be named plugins", + "${ksClass.qualifiedName?.asString()} @Assisted parameter must be named plugins", ) } @@ -156,7 +154,7 @@ class ContributesNodeProcessor( content.writeTo( codeGenerator = codeGenerator, dependencies = Dependencies( - aggregating = true, + aggregating = false, ksClass.containingFile!! ), ) diff --git a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt index a4bfe0c60d..cc56e15f03 100644 --- a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt +++ b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt @@ -9,16 +9,18 @@ package io.element.android.x import android.app.Application import androidx.startup.AppInitializer +import dev.zacsweers.metro.asContribution +import dev.zacsweers.metro.createGraphFactory import io.element.android.features.cachecleaner.api.CacheCleanerInitializer import io.element.android.libraries.di.DaggerComponentOwner import io.element.android.x.di.AppComponent -import io.element.android.x.di.DaggerAppComponent +import io.element.android.x.di.globalGraph import io.element.android.x.info.logApplicationInfo import io.element.android.x.initializer.CrashInitializer import io.element.android.x.initializer.PlatformInitializer class ElementXApplication : Application(), DaggerComponentOwner { - override val daggerComponent: AppComponent = DaggerAppComponent.factory().create(this) + override val daggerComponent: AppComponent = globalGraph.asContribution().create(this) override fun onCreate() { super.onCreate() diff --git a/app/src/main/kotlin/io/element/android/x/MainNode.kt b/app/src/main/kotlin/io/element/android/x/MainNode.kt index 2fd36db3b9..fa0b7eafc2 100644 --- a/app/src/main/kotlin/io/element/android/x/MainNode.kt +++ b/app/src/main/kotlin/io/element/android/x/MainNode.kt @@ -21,7 +21,7 @@ import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.plugin.Plugin import io.element.android.appnav.RootFlowNode import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.DaggerComponentOwner import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize diff --git a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt index 8525f6356b..3f6f21d2c9 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt @@ -7,7 +7,7 @@ package io.element.android.x.di -import com.squareup.anvil.annotations.ContributesTo +import dev.zacsweers.metro.ContributesTo import io.element.android.features.api.MigrationEntryPoint import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.lockscreen.api.LockScreenEntryPoint @@ -15,7 +15,7 @@ import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.matrix.api.platform.InitPlatformService import io.element.android.libraries.matrix.api.tracing.TracingService diff --git a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt b/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt index 2a0cac9d74..ba6b24b499 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023, 2024 New Vector Ltd. + * Copyright 2025 New Vector Ltd. * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. @@ -8,20 +8,22 @@ package io.element.android.x.di import android.content.Context -import com.squareup.anvil.annotations.MergeComponent -import dagger.BindsInstance +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.GraphExtension +import dev.zacsweers.metro.Provides import io.element.android.libraries.architecture.NodeFactoriesBindings -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext -@SingleIn(AppScope::class) -@MergeComponent(AppScope::class) +@GraphExtension(AppScope::class) interface AppComponent : NodeFactoriesBindings { - @MergeComponent.Factory + val sessionComponentFactory: SessionComponent.Factory + + @ContributesTo(GlobalScope::class) + @GraphExtension.Factory interface Factory { fun create( - @ApplicationContext @BindsInstance + @ApplicationContext @Provides context: Context ): AppComponent } diff --git a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt index c5bc3f4598..fe1991e937 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt @@ -11,9 +11,10 @@ import android.content.Context import android.content.SharedPreferences import android.content.res.Resources import androidx.preference.PreferenceManager -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Named +import dev.zacsweers.metro.Provides import io.element.android.appconfig.ApplicationConfig import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.messages.impl.timeline.components.customreaction.DefaultEmojibaseProvider @@ -23,10 +24,10 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.CacheDirectory -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.x.BuildConfig import io.element.android.x.R @@ -37,16 +38,17 @@ import kotlinx.coroutines.MainScope import kotlinx.coroutines.plus import java.io.File -@Module +@BindingContainer @ContributesTo(AppScope::class) object AppModule { @Provides + @Named("baseDirectory") fun providesBaseDirectory(@ApplicationContext context: Context): File { return File(context.filesDir, "sessions") } @Provides - @CacheDirectory + @Named("cacheDirectory") fun providesCacheDirectory(@ApplicationContext context: Context): File { return context.cacheDir } diff --git a/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt b/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt index fb7a24ae8a..9ed199b619 100644 --- a/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt +++ b/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt @@ -7,20 +7,19 @@ package io.element.android.x.di -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appnav.di.RoomComponentFactory import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.room.JoinedRoom -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultRoomComponentFactory @Inject constructor( - private val roomComponentBuilder: RoomComponent.Builder +@Inject +class DefaultRoomComponentFactory( + private val sessionComponent: SessionComponent, ) : RoomComponentFactory { override fun create(room: JoinedRoom): Any { - return roomComponentBuilder - .joinedRoom(room) - .baseRoom(room) - .build() + return sessionComponent.roomComponentFactory + .create(room, room) } } diff --git a/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt b/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt index 1c36991cd2..9eb2df16b4 100644 --- a/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt +++ b/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt @@ -7,17 +7,18 @@ package io.element.android.x.di -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.appnav.di.SessionComponentFactory -import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.MatrixClient -import javax.inject.Inject @ContributesBinding(AppScope::class) -class DefaultSessionComponentFactory @Inject constructor( - private val sessionComponentBuilder: SessionComponent.Builder +@Inject +class DefaultSessionComponentFactory( + private val appComponent: AppComponent ) : SessionComponentFactory { override fun create(client: MatrixClient): Any { - return sessionComponentBuilder.client(client).build() + return appComponent.sessionComponentFactory.createSessionComponent(client) } } diff --git a/app/src/main/kotlin/io/element/android/x/di/GlobalGraph.kt b/app/src/main/kotlin/io/element/android/x/di/GlobalGraph.kt new file mode 100644 index 0000000000..81d38f72f4 --- /dev/null +++ b/app/src/main/kotlin/io/element/android/x/di/GlobalGraph.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2025 New Vector 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.x.di + +import dev.zacsweers.metro.DependencyGraph +import dev.zacsweers.metro.createGraph + +@DependencyGraph(GlobalScope::class) +interface GlobalGraph + +internal val globalGraph = createGraph() diff --git a/app/src/main/kotlin/io/element/android/x/di/GlobalScope.kt b/app/src/main/kotlin/io/element/android/x/di/GlobalScope.kt new file mode 100644 index 0000000000..4340f501fd --- /dev/null +++ b/app/src/main/kotlin/io/element/android/x/di/GlobalScope.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2025 New Vector 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.x.di + +class GlobalScope private constructor() diff --git a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt b/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt index ac126ce0f0..575fd048a6 100644 --- a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt +++ b/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023, 2024 New Vector Ltd. + * Copyright 2025 New Vector Ltd. * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. @@ -7,32 +7,24 @@ package io.element.android.x.di -import com.squareup.anvil.annotations.ContributesTo -import com.squareup.anvil.annotations.MergeSubcomponent -import dagger.BindsInstance +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.GraphExtension +import dev.zacsweers.metro.Provides import io.element.android.libraries.architecture.NodeFactoriesBindings +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.JoinedRoom -@SingleIn(RoomScope::class) -@MergeSubcomponent(RoomScope::class) +@GraphExtension(RoomScope::class) interface RoomComponent : NodeFactoriesBindings { - @MergeSubcomponent.Builder - interface Builder { - @BindsInstance - fun joinedRoom(room: JoinedRoom): Builder - - @BindsInstance - fun baseRoom(room: BaseRoom): Builder - - fun build(): RoomComponent - } - @ContributesTo(SessionScope::class) - interface ParentBindings { - fun roomComponentBuilder(): Builder + @GraphExtension.Factory + interface Factory { + fun create( + @Provides joinedRoom: JoinedRoom, + @Provides baseRoom: BaseRoom + ): RoomComponent } } diff --git a/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt b/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt index 7cdc686917..1c3b89f42f 100644 --- a/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt +++ b/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023, 2024 New Vector Ltd. + * Copyright 2025 New Vector Ltd. * * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. @@ -7,28 +7,21 @@ package io.element.android.x.di -import com.squareup.anvil.annotations.ContributesTo -import com.squareup.anvil.annotations.MergeSubcomponent -import dagger.BindsInstance +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.GraphExtension +import dev.zacsweers.metro.Provides import io.element.android.libraries.architecture.NodeFactoriesBindings -import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.di.SingleIn import io.element.android.libraries.matrix.api.MatrixClient -@SingleIn(SessionScope::class) -@MergeSubcomponent(SessionScope::class) +@GraphExtension(SessionScope::class) interface SessionComponent : NodeFactoriesBindings { - @MergeSubcomponent.Builder - interface Builder { - @BindsInstance - fun client(matrixClient: MatrixClient): Builder - - fun build(): SessionComponent - } + val roomComponentFactory: RoomComponent.Factory @ContributesTo(AppScope::class) - interface ParentBindings { - fun sessionComponentBuilder(): Builder + @GraphExtension.Factory + interface Factory { + fun createSessionComponent(@Provides matrixClient: MatrixClient): SessionComponent } } diff --git a/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt b/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt index cce6d76510..52c7293075 100644 --- a/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt +++ b/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt @@ -10,19 +10,20 @@ package io.element.android.x.intent import android.content.Context import android.content.Intent import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.deeplink.api.DeepLinkCreator -import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.ApplicationContext import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.push.impl.intent.IntentProvider import io.element.android.x.MainActivity -import javax.inject.Inject @ContributesBinding(AppScope::class) -class DefaultIntentProvider @Inject constructor( +@Inject +class DefaultIntentProvider( @ApplicationContext private val context: Context, private val deepLinkCreator: DeepLinkCreator, ) : IntentProvider { diff --git a/app/src/main/kotlin/io/element/android/x/oidc/DefaultOidcRedirectUrlProvider.kt b/app/src/main/kotlin/io/element/android/x/oidc/DefaultOidcRedirectUrlProvider.kt index 4a103b4daa..1422a95cd2 100644 --- a/app/src/main/kotlin/io/element/android/x/oidc/DefaultOidcRedirectUrlProvider.kt +++ b/app/src/main/kotlin/io/element/android/x/oidc/DefaultOidcRedirectUrlProvider.kt @@ -7,15 +7,16 @@ package io.element.android.x.oidc -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcRedirectUrlProvider import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.x.R -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultOidcRedirectUrlProvider @Inject constructor( +@Inject +class DefaultOidcRedirectUrlProvider( private val stringProvider: StringProvider, ) : OidcRedirectUrlProvider { override fun provide() = buildString { diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt index ae169fcd34..26dd4c031a 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt @@ -22,14 +22,14 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.di.SessionComponentFactory import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.DaggerComponentOwner import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder @@ -41,7 +41,8 @@ import kotlinx.parcelize.Parcelize * This allow to inject objects with SessionScope in the constructor of [LoggedInFlowNode]. */ @ContributesNode(AppScope::class) -class LoggedInAppScopeFlowNode @AssistedInject constructor( +@Inject +class LoggedInAppScopeFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, sessionComponentFactory: SessionComponentFactory, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInEventProcessor.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInEventProcessor.kt index 3f403ea8e0..7dd3ca0c57 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInEventProcessor.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInEventProcessor.kt @@ -18,9 +18,10 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class LoggedInEventProcessor @Inject constructor( +@Inject +class LoggedInEventProcessor( private val snackbarDispatcher: SnackbarDispatcher, private val roomMembershipObserver: RoomMembershipObserver, ) { diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index f621c7a090..85c47f25ae 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -36,8 +36,8 @@ import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.replace import com.bumble.appyx.navmodel.backstack.operation.singleTop -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.loggedin.LoggedInNode @@ -66,8 +66,9 @@ import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.waitForNavTargetAttached +import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.MatrixClient @@ -100,7 +101,8 @@ import kotlin.time.Duration.Companion.seconds import kotlin.time.toKotlinDuration @ContributesNode(SessionScope::class) -class LoggedInFlowNode @AssistedInject constructor( +@Inject +class LoggedInFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val homeEntryPoint: HomeEntryPoint, @@ -561,13 +563,15 @@ class LoggedInFlowNode @AssistedInject constructor( } } - @ContributesNode(AppScope::class) - class PlaceholderNode @AssistedInject constructor( - @Assisted buildContext: BuildContext, - @Assisted plugins: List, - ) : Node(buildContext, plugins = plugins) } +@ContributesNode(AppScope::class) +@Inject +class PlaceholderNode( + @Assisted buildContext: BuildContext, + @Assisted plugins: List, +) : Node(buildContext, plugins = plugins) + @Parcelize private class AttachRoomOperation( val roomTarget: LoggedInFlowNode.NavTarget.Room, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt index bd4802b77b..8a4c71d23a 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt @@ -20,8 +20,8 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.api.LoginEntryPoint import io.element.android.features.login.api.LoginParams @@ -31,12 +31,13 @@ import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs import io.element.android.libraries.designsystem.utils.ForceOrientationInMobileDevices import io.element.android.libraries.designsystem.utils.ScreenOrientation -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.ui.media.NotLoggedInImageLoaderFactory import kotlinx.parcelize.Parcelize @ContributesNode(AppScope::class) -class NotLoggedInFlowNode @AssistedInject constructor( +@Inject +class NotLoggedInFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val loginEntryPoint: LoginEntryPoint, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index c64288839b..4ea4506efb 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -23,8 +23,8 @@ import com.bumble.appyx.core.state.MutableSavedStateMap import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.di.MatrixSessionCache @@ -46,7 +46,7 @@ import io.element.android.libraries.architecture.waitForChildAttached import io.element.android.libraries.core.uri.ensureProtocol import io.element.android.libraries.deeplink.api.DeeplinkData import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias @@ -61,7 +61,8 @@ import kotlinx.parcelize.Parcelize import timber.log.Timber @ContributesNode(AppScope::class) -class RootFlowNode @AssistedInject constructor( +@Inject +class RootFlowNode( @Assisted val buildContext: BuildContext, @Assisted plugins: List, private val authenticationService: MatrixAuthenticationService, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt b/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt index 1e173474cc..da0bab09ad 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt @@ -10,9 +10,9 @@ package io.element.android.appnav.di import androidx.annotation.VisibleForTesting import com.bumble.appyx.core.state.MutableSavedStateMap import com.bumble.appyx.core.state.SavedStateMap -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService @@ -22,7 +22,7 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber import java.util.concurrent.ConcurrentHashMap -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val SAVE_INSTANCE_KEY = "io.element.android.x.di.MatrixClientsHolder.SaveInstanceKey" @@ -33,7 +33,8 @@ private const val SAVE_INSTANCE_KEY = "io.element.android.x.di.MatrixClientsHold */ @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class MatrixSessionCache @Inject constructor( +@Inject +class MatrixSessionCache( private val authenticationService: MatrixAuthenticationService, private val syncOrchestratorFactory: SyncOrchestrator.Factory, ) : MatrixClientProvider { diff --git a/appnav/src/main/kotlin/io/element/android/appnav/di/SyncOrchestrator.kt b/appnav/src/main/kotlin/io/element/android/appnav/di/SyncOrchestrator.kt index d3ab19466f..26377acae8 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/di/SyncOrchestrator.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/di/SyncOrchestrator.kt @@ -8,9 +8,9 @@ package io.element.android.appnav.di import androidx.annotation.VisibleForTesting -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.networkmonitor.api.NetworkMonitor import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.libraries.core.coroutine.CoroutineDispatchers @@ -30,7 +30,8 @@ import java.util.concurrent.atomic.AtomicBoolean import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.seconds -class SyncOrchestrator @AssistedInject constructor( +@Inject +class SyncOrchestrator( @Assisted matrixClient: MatrixClient, private val appForegroundStateService: AppForegroundStateService, private val networkMonitor: NetworkMonitor, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt b/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt index 0c8a7cb17f..85c8a23c07 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcIntentResolver import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject sealed interface ResolvedIntent { data class Navigation(val deeplinkData: DeeplinkData) : ResolvedIntent @@ -27,7 +27,8 @@ sealed interface ResolvedIntent { data class IncomingShare(val intent: Intent) : ResolvedIntent } -class IntentResolver @Inject constructor( +@Inject +class IntentResolver( private val deeplinkParser: DeeplinkParser, private val loginIntentResolver: LoginIntentResolver, private val oidcIntentResolver: OidcIntentResolver, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInNode.kt index b337d32cdf..6e14613b1b 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInNode.kt @@ -13,13 +13,14 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class LoggedInNode @AssistedInject constructor( +@Inject +class LoggedInNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val loggedInPresenter: LoggedInPresenter, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt index 7ef73986ac..f04e99ffef 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt @@ -42,11 +42,12 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val pusherTag = LoggerTag("Pusher", LoggerTag.PushLoggerTag) -class LoggedInPresenter @Inject constructor( +@Inject +class LoggedInPresenter( private val matrixClient: MatrixClient, private val syncService: SyncService, private val pushService: PushService, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/MediaPreviewConfigMigration.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/MediaPreviewConfigMigration.kt index d9ed15318a..a85304000f 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/MediaPreviewConfigMigration.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/MediaPreviewConfigMigration.kt @@ -14,13 +14,14 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * This migration is temporary, will be safe to remove after some time. * The goal is to set the server config if it's not set, and remove the local data. */ -class MediaPreviewConfigMigration @Inject constructor( +@Inject +class MediaPreviewConfigMigration( private val mediaPreviewService: MediaPreviewService, private val appPreferencesStore: AppPreferencesStore, @SessionCoroutineScope diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt index cbb247569a..2e4218be88 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt @@ -10,7 +10,7 @@ package io.element.android.appnav.loggedin import androidx.annotation.VisibleForTesting import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.sync.SyncService import io.element.android.libraries.matrix.api.sync.SyncState @@ -21,13 +21,14 @@ import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @VisibleForTesting const val SEND_QUEUES_RETRY_DELAY_MILLIS = 500L @SingleIn(SessionScope::class) -class SendQueues @Inject constructor( +@Inject +class SendQueues( private val matrixClient: MatrixClient, private val syncService: SyncService, ) { diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt index de537f0944..321a501330 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/RoomFlowNode.kt @@ -21,8 +21,8 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.newRoot -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.room.joined.JoinedRoomFlowNode @@ -63,7 +63,8 @@ import java.util.Optional import kotlin.jvm.optionals.getOrNull @ContributesNode(SessionScope::class) -class RoomFlowNode @AssistedInject constructor( +@Inject +class RoomFlowNode( @Assisted val buildContext: BuildContext, @Assisted plugins: List, private val client: MatrixClient, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt index 07580060c7..3cfc513aea 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomFlowNode.kt @@ -24,8 +24,8 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.newRoot -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.room.RoomNavigationTarget import io.element.android.libraries.architecture.BackstackView @@ -45,7 +45,8 @@ import kotlinx.coroutines.flow.onEach import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class JoinedRoomFlowNode @AssistedInject constructor( +@Inject +class JoinedRoomFlowNode( @Assisted val buildContext: BuildContext, @Assisted plugins: List, loadingRoomStateFlowFactory: LoadingRoomStateFlowFactory, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt index b5d118df3c..49d9d79a0e 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt @@ -17,8 +17,8 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.di.RoomComponentFactory import io.element.android.appnav.room.RoomNavigationTarget @@ -45,7 +45,8 @@ import kotlinx.parcelize.Parcelize import timber.log.Timber @ContributesNode(SessionScope::class) -class JoinedRoomLoadedFlowNode @AssistedInject constructor( +@Inject +class JoinedRoomLoadedFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val messagesEntryPoint: MessagesEntryPoint, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt b/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt index a573d37b06..965ca2dbe1 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt @@ -18,7 +18,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.onEach -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val SAVE_INSTANCE_KEY = "io.element.android.x.RootNavStateFlowFactory.SAVE_INSTANCE_KEY" @@ -26,7 +26,8 @@ private const val SAVE_INSTANCE_KEY = "io.element.android.x.RootNavStateFlowFact * This class is responsible for creating a flow of [RootNavState]. * It gathers data from multiple datasource and creates a unique one. */ -class RootNavStateFlowFactory @Inject constructor( +@Inject +class RootNavStateFlowFactory( private val authenticationService: MatrixAuthenticationService, private val cacheService: CacheService, private val matrixSessionCache: MatrixSessionCache, diff --git a/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt index 9d4ce4442d..82012297dc 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt @@ -18,9 +18,10 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.SdkMetadata import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.apperror.api.AppErrorStateService -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RootPresenter @Inject constructor( +@Inject +class RootPresenter( private val crashDetectionPresenter: Presenter, private val rageshakeDetectionPresenter: Presenter, private val appErrorStateService: AppErrorStateService, diff --git a/enterprise b/enterprise deleted file mode 160000 index 9c78fd98e8..0000000000 --- a/enterprise +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9c78fd98e895ca8bf92ffc6604111155c8759cc0 diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt index ba1073d480..9c8ab391cb 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt @@ -14,16 +14,17 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.appconfig.AnalyticsConfig import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.androidutils.browser.openUrlInChromeCustomTab -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class AnalyticsOptInNode @AssistedInject constructor( +@Inject +class AnalyticsOptInNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: AnalyticsOptInPresenter, diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInPresenter.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInPresenter.kt index 39b99a9257..26624bf60d 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInPresenter.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInPresenter.kt @@ -16,9 +16,10 @@ import io.element.android.libraries.core.meta.BuildMeta import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class AnalyticsOptInPresenter @Inject constructor( +@Inject +class AnalyticsOptInPresenter( private val buildMeta: BuildMeta, private val analyticsService: AnalyticsService, ) : Presenter { diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt index 4903534159..d2ee2a5f94 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt @@ -9,14 +9,15 @@ package io.element.android.features.analytics.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.analytics.api.AnalyticsEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultAnalyticsEntryPoint @Inject constructor() : AnalyticsEntryPoint { +@Inject +class DefaultAnalyticsEntryPoint() : AnalyticsEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext): Node { return parentNode.createNode(buildContext) } 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/AnalyticsModule.kt index d1ddd57b2f..e41d3db8cd 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/AnalyticsModule.kt @@ -7,16 +7,16 @@ package io.element.android.features.analytics.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo import io.element.android.features.analytics.api.preferences.AnalyticsPreferencesState import io.element.android.features.analytics.impl.preferences.AnalyticsPreferencesPresenter import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) -@Module +@BindingContainer interface AnalyticsModule { @Binds fun bindAnalyticsPreferencesPresenter(presenter: AnalyticsPreferencesPresenter): Presenter diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/preferences/AnalyticsPreferencesPresenter.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/preferences/AnalyticsPreferencesPresenter.kt index 6904734f26..cd0f99b4a6 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/preferences/AnalyticsPreferencesPresenter.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/preferences/AnalyticsPreferencesPresenter.kt @@ -18,9 +18,10 @@ import io.element.android.libraries.core.meta.BuildMeta import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class AnalyticsPreferencesPresenter @Inject constructor( +@Inject +class AnalyticsPreferencesPresenter( private val analyticsService: AnalyticsService, private val buildMeta: BuildMeta, ) : Presenter { diff --git a/features/cachecleaner/api/src/main/kotlin/io/element/android/features/cachecleaner/api/CacheCleanerBindings.kt b/features/cachecleaner/api/src/main/kotlin/io/element/android/features/cachecleaner/api/CacheCleanerBindings.kt index 9c44c1d5ae..30e3b99f7b 100644 --- a/features/cachecleaner/api/src/main/kotlin/io/element/android/features/cachecleaner/api/CacheCleanerBindings.kt +++ b/features/cachecleaner/api/src/main/kotlin/io/element/android/features/cachecleaner/api/CacheCleanerBindings.kt @@ -7,8 +7,8 @@ package io.element.android.features.cachecleaner.api -import com.squareup.anvil.annotations.ContributesTo -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) interface CacheCleanerBindings { diff --git a/features/cachecleaner/impl/src/main/kotlin/io/element/android/features/cachecleaner/impl/DefaultCacheCleaner.kt b/features/cachecleaner/impl/src/main/kotlin/io/element/android/features/cachecleaner/impl/DefaultCacheCleaner.kt index 86e6432cc5..92ddb06bd1 100644 --- a/features/cachecleaner/impl/src/main/kotlin/io/element/android/features/cachecleaner/impl/DefaultCacheCleaner.kt +++ b/features/cachecleaner/impl/src/main/kotlin/io/element/android/features/cachecleaner/impl/DefaultCacheCleaner.kt @@ -7,28 +7,30 @@ package io.element.android.features.cachecleaner.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.cachecleaner.api.CacheCleaner import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Named /** * Default implementation of [CacheCleaner]. */ @ContributesBinding(AppScope::class) -class DefaultCacheCleaner @Inject constructor( +@Inject +class DefaultCacheCleaner( @AppCoroutineScope private val coroutineScope: CoroutineScope, private val dispatchers: CoroutineDispatchers, - @CacheDirectory private val cacheDir: File, + @Named("cacheDirectory") private val cacheDir: File, ) : CacheCleaner { companion object { val SUBDIRS_TO_CLEANUP = listOf("temp/media", "temp/voice") diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/DefaultElementCallEntryPoint.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/DefaultElementCallEntryPoint.kt index 009840743c..e58059e8a1 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/DefaultElementCallEntryPoint.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/DefaultElementCallEntryPoint.kt @@ -8,20 +8,21 @@ package io.element.android.features.call.impl import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.call.api.CallType import io.element.android.features.call.api.ElementCallEntryPoint import io.element.android.features.call.impl.notifications.CallNotificationData import io.element.android.features.call.impl.utils.ActiveCallManager import io.element.android.features.call.impl.utils.IntentProvider -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultElementCallEntryPoint @Inject constructor( +@Inject +class DefaultElementCallEntryPoint( @ApplicationContext private val context: Context, private val activeCallManager: ActiveCallManager, ) : ElementCallEntryPoint { diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/di/CallBindings.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/di/CallBindings.kt index e92b4c64fa..729ce3a4cc 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/di/CallBindings.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/di/CallBindings.kt @@ -7,11 +7,11 @@ package io.element.android.features.call.impl.di -import com.squareup.anvil.annotations.ContributesTo +import dev.zacsweers.metro.ContributesTo import io.element.android.features.call.impl.receivers.DeclineCallBroadcastReceiver import io.element.android.features.call.impl.ui.ElementCallActivity import io.element.android.features.call.impl.ui.IncomingCallActivity -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) interface CallBindings { diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/notifications/RingingCallNotificationCreator.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/notifications/RingingCallNotificationCreator.kt index de31b0b02b..b2521adaf7 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/notifications/RingingCallNotificationCreator.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/notifications/RingingCallNotificationCreator.kt @@ -21,7 +21,7 @@ import io.element.android.features.call.impl.receivers.DeclineCallBroadcastRecei import io.element.android.features.call.impl.ui.IncomingCallActivity import io.element.android.features.call.impl.utils.IntentProvider import io.element.android.libraries.designsystem.utils.CommonDrawables -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId @@ -29,13 +29,14 @@ import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder import io.element.android.libraries.push.api.notifications.NotificationBitmapLoader -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds /** * Creates a notification for a ringing call. */ -class RingingCallNotificationCreator @Inject constructor( +@Inject +class RingingCallNotificationCreator( @ApplicationContext private val context: Context, private val matrixClientProvider: MatrixClientProvider, private val imageLoaderHolder: ImageLoaderHolder, 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 b64852d283..278570bf23 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 @@ -18,11 +18,12 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.log.logger.LoggerTag import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("PiP") -class PictureInPicturePresenter @Inject constructor( +@Inject +class PictureInPicturePresenter( pipSupportProvider: PipSupportProvider, ) : Presenter { private val isPipSupported = pipSupportProvider.isPipSupported() diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt index 4d5441367e..8ffa1c4437 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt @@ -11,11 +11,11 @@ import android.content.Context import android.content.pm.PackageManager import android.os.Build import androidx.annotation.ChecksSdkIntAtLeast -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.bool.orFalse -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.Inject interface PipSupportProvider { @ChecksSdkIntAtLeast(Build.VERSION_CODES.O) @@ -23,7 +23,8 @@ interface PipSupportProvider { } @ContributesBinding(AppScope::class) -class DefaultPipSupportProvider @Inject constructor( +@Inject +class DefaultPipSupportProvider( @ApplicationContext private val context: Context, ) : PipSupportProvider { override fun isPipSupported(): Boolean { diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/receivers/DeclineCallBroadcastReceiver.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/receivers/DeclineCallBroadcastReceiver.kt index c857c9e2c8..0df100b3a0 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/receivers/DeclineCallBroadcastReceiver.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/receivers/DeclineCallBroadcastReceiver.kt @@ -19,7 +19,7 @@ import io.element.android.libraries.architecture.bindings import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Broadcast receiver to decline the incoming call. diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt index 0164bb3089..d82c64b607 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/CallScreenPresenter.kt @@ -17,9 +17,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.compound.theme.ElementTheme import io.element.android.features.call.api.CallType @@ -49,7 +49,8 @@ import timber.log.Timber import java.util.UUID import kotlin.time.Duration.Companion.seconds -class CallScreenPresenter @AssistedInject constructor( +@Inject +class CallScreenPresenter( @Assisted private val callType: CallType, @Assisted private val navigator: CallScreenNavigator, private val callWidgetProvider: CallWidgetProvider, 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 870c224464..e76c048c79 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 @@ -50,7 +50,7 @@ import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.theme.ElementThemeApp import io.element.android.libraries.preferences.api.store.AppPreferencesStore import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("ElementCallActivity") diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt index dc77af9b77..288c1df530 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt @@ -30,7 +30,7 @@ import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Activity that's displayed as a full screen intent when an incoming call is received. diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt index cce855139a..21cc3af6b9 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt @@ -9,9 +9,9 @@ package io.element.android.features.call.impl.ui import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalConfiguration -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface LanguageTagProvider { @Composable @@ -19,7 +19,8 @@ interface LanguageTagProvider { } @ContributesBinding(AppScope::class) -class DefaultLanguageTagProvider @Inject constructor() : LanguageTagProvider { +@Inject +class DefaultLanguageTagProvider() : LanguageTagProvider { @Composable override fun provideLanguageTag(): String? { return LocalConfiguration.current.locales.get(0)?.toLanguageTag() diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt index d4f5abb59d..b6ce7ecaf1 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt @@ -15,16 +15,16 @@ import androidx.core.app.NotificationManagerCompat import androidx.core.content.getSystemService import coil3.SingletonImageLoader import coil3.annotation.DelicateCoilApi -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.ElementCallConfig import io.element.android.features.call.api.CallType import io.element.android.features.call.api.CurrentCall import io.element.android.features.call.impl.notifications.CallNotificationData import io.element.android.features.call.impl.notifications.RingingCallNotificationCreator import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.SessionId @@ -52,7 +52,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds /** @@ -86,7 +86,8 @@ interface ActiveCallManager { @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultActiveCallManager @Inject constructor( +@Inject +class DefaultActiveCallManager( @ApplicationContext context: Context, @AppCoroutineScope private val coroutineScope: CoroutineScope, diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallIntentDataParser.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallIntentDataParser.kt index c81b87746e..bf3720f88e 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallIntentDataParser.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallIntentDataParser.kt @@ -9,9 +9,10 @@ package io.element.android.features.call.impl.utils import android.net.Uri import androidx.core.net.toUri -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class CallIntentDataParser @Inject constructor() { +@Inject +class CallIntentDataParser() { private val validHttpSchemes = sequenceOf("https") private val knownHosts = sequenceOf( "call.element.io", diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt index c978aba7e8..98aefc532f 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt @@ -7,14 +7,15 @@ package io.element.android.features.call.impl.utils -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.call.impl.BuildConfig -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.widget.CallAnalyticCredentialsProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultCallAnalyticCredentialsProvider @Inject constructor() : CallAnalyticCredentialsProvider { +@Inject +class DefaultCallAnalyticCredentialsProvider() : CallAnalyticCredentialsProvider { override val posthogUserId: String? = BuildConfig.POSTHOG_USER_ID.takeIf { it.isNotBlank() } override val posthogApiHost: String? = BuildConfig.POSTHOG_API_HOST.takeIf { it.isNotBlank() } override val posthogApiKey: String? = BuildConfig.POSTHOG_API_KEY.takeIf { it.isNotBlank() } diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt index f5d50ecfe6..545bf893e9 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt @@ -7,9 +7,9 @@ package io.element.android.features.call.impl.utils -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -18,12 +18,13 @@ import io.element.android.libraries.matrix.api.widget.CallWidgetSettingsProvider import io.element.android.libraries.preferences.api.store.AppPreferencesStore import io.element.android.services.appnavstate.api.ActiveRoomsHolder import kotlinx.coroutines.flow.firstOrNull -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val EMBEDDED_CALL_WIDGET_BASE_URL = "https://appassets.androidplatform.net/element-call/index.html" @ContributesBinding(AppScope::class) -class DefaultCallWidgetProvider @Inject constructor( +@Inject +class DefaultCallWidgetProvider( private val matrixClientsProvider: MatrixClientProvider, private val appPreferencesStore: AppPreferencesStore, private val callWidgetSettingsProvider: CallWidgetSettingsProvider, diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt index 0e561713b3..bad2b830ca 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt @@ -7,17 +7,18 @@ package io.element.android.features.call.impl.utils -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.call.api.CurrentCall import io.element.android.features.call.api.CurrentCallService -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableStateFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultCurrentCallService @Inject constructor() : CurrentCallService { +@Inject +class DefaultCurrentCallService() : CurrentCallService { override val currentCall = MutableStateFlow(CurrentCall.None) fun onCallStarted(call: CurrentCall) { diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesNode.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesNode.kt index 5b8a839658..0960dcdd50 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesNode.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesNode.kt @@ -14,8 +14,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRolesListType import io.element.android.libraries.architecture.NodeInputs @@ -26,7 +26,8 @@ import io.element.android.libraries.matrix.api.room.RoomMember import kotlinx.coroutines.flow.first @ContributesNode(RoomScope::class) -class ChangeRolesNode @AssistedInject constructor( +@Inject +class ChangeRolesNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: ChangeRolesPresenter.Factory, diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenter.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenter.kt index ce971464f4..a6d0ed6a51 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenter.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRolesPresenter.kt @@ -18,9 +18,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.RoomModeration import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter @@ -47,7 +47,8 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -class ChangeRolesPresenter @AssistedInject constructor( +@Inject +class ChangeRolesPresenter( @Assisted private val role: RoomMember.Role, private val room: JoinedRoom, private val dispatchers: CoroutineDispatchers, diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRoomMemberRolesRootNode.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRoomMemberRolesRootNode.kt index 881e93e934..257558359a 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRoomMemberRolesRootNode.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRoomMemberRolesRootNode.kt @@ -16,8 +16,8 @@ import com.bumble.appyx.core.navigation.model.permanent.PermanentNavModel import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.appnav.di.RoomComponentFactory import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRolesEntryPoint @@ -32,7 +32,8 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class ChangeRoomMemberRolesRootNode @AssistedInject constructor( +@Inject +class ChangeRoomMemberRolesRootNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, roomComponentFactory: RoomComponentFactory, diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt index 4dc26cde8e..4040db5532 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt @@ -9,16 +9,17 @@ package io.element.android.features.changeroommemberroles.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRolesEntryPoint import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRolesListType import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.room.JoinedRoom -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultChangeRoomMemberRolesEntyPoint @Inject constructor() : ChangeRoomMemberRolesEntryPoint { +@Inject +class DefaultChangeRoomMemberRolesEntyPoint() : ChangeRoomMemberRolesEntryPoint { override fun builder(parentNode: Node, buildContext: BuildContext): ChangeRoomMemberRolesEntryPoint.Builder { return object : ChangeRoomMemberRolesEntryPoint.Builder { private lateinit var changeRoomMemberRolesListType: ChangeRoomMemberRolesListType diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/RoomMemberListDataSource.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/RoomMemberListDataSource.kt index 184a7058c7..b9d45ab844 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/RoomMemberListDataSource.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/RoomMemberListDataSource.kt @@ -13,9 +13,10 @@ import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.roomMembers import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RoomMemberListDataSource @Inject constructor( +@Inject +class RoomMemberListDataSource( private val room: BaseRoom, private val coroutineDispatchers: CoroutineDispatchers, ) { diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomFlowNode.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomFlowNode.kt index 6c819edf5a..7b01cec854 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomFlowNode.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomFlowNode.kt @@ -16,8 +16,8 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.replace -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.createroom.api.CreateRoomEntryPoint import io.element.android.features.createroom.impl.addpeople.AddPeopleNode @@ -30,7 +30,8 @@ import io.element.android.libraries.matrix.api.core.RoomId import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class CreateRoomFlowNode @AssistedInject constructor( +@Inject +class CreateRoomFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : BaseFlowNode( diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt index b9dfb20960..dde6d4a186 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.createroom.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.createroom.api.CreateRoomEntryPoint import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.SessionScope -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultCreateRoomEntryPoint @Inject constructor() : CreateRoomEntryPoint { +@Inject +class DefaultCreateRoomEntryPoint() : CreateRoomEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): CreateRoomEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleNode.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleNode.kt index 3fc9cd7d81..54dcec28ee 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleNode.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/addpeople/AddPeopleNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.invitepeople.api.InvitePeoplePresenter import io.element.android.features.invitepeople.api.InvitePeopleRenderer @@ -24,7 +24,8 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomId @ContributesNode(SessionScope::class) -class AddPeopleNode @AssistedInject constructor( +@Inject +class AddPeopleNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, invitePeoplePresenterFactory: InvitePeoplePresenter.Factory, diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt index 6927c51366..4cc076fbea 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomNode.kt @@ -14,8 +14,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @@ -23,7 +23,8 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(SessionScope::class) -class ConfigureRoomNode @AssistedInject constructor( +@Inject +class ConfigureRoomNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: ConfigureRoomPresenter, diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt index 9b2880fb6f..954cb5baa9 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt @@ -44,10 +44,11 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.jvm.optionals.getOrDefault -class ConfigureRoomPresenter @Inject constructor( +@Inject +class ConfigureRoomPresenter( private val dataStore: CreateRoomConfigStore, private val matrixClient: MatrixClient, private val mediaPickerProvider: PickerProvider, diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/CreateRoomConfigStore.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/CreateRoomConfigStore.kt index bee9b686d6..5b8efe7f66 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/CreateRoomConfigStore.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/CreateRoomConfigStore.kt @@ -14,9 +14,10 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.getAndUpdate import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class CreateRoomConfigStore @Inject constructor( +@Inject +class CreateRoomConfigStore( private val roomAliasHelper: RoomAliasHelper, ) { private val createRoomConfigFlow: MutableStateFlow = MutableStateFlow(CreateRoomConfig()) diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationNode.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationNode.kt index 59c45c5bb5..4ef790032c 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationNode.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationNode.kt @@ -12,13 +12,14 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class AccountDeactivationNode @AssistedInject constructor( +@Inject +class AccountDeactivationNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: AccountDeactivationPresenter, diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt index d8e8137d2d..4452a06e45 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt @@ -18,9 +18,10 @@ import io.element.android.libraries.architecture.runCatchingUpdatingState import io.element.android.libraries.matrix.api.MatrixClient import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class AccountDeactivationPresenter @Inject constructor( +@Inject +class AccountDeactivationPresenter( private val matrixClient: MatrixClient, ) : Presenter { @Composable diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt index 5481db19d7..c4f7573821 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt @@ -9,14 +9,15 @@ package io.element.android.features.logout.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.deactivation.api.AccountDeactivationEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultAccountDeactivationEntryPoint @Inject constructor() : AccountDeactivationEntryPoint { +@Inject +class DefaultAccountDeactivationEntryPoint() : AccountDeactivationEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext): Node { return parentNode.createNode(buildContext) } diff --git a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt index d5c23788d6..8cf5753fe7 100644 --- a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt +++ b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt @@ -7,19 +7,20 @@ package io.element.android.features.enterprise.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.compound.tokens.generated.SemanticColors import io.element.android.compound.tokens.generated.compoundColorsDark import io.element.android.compound.tokens.generated.compoundColorsLight import io.element.android.features.enterprise.api.BugReportUrl import io.element.android.features.enterprise.api.EnterpriseService -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.SessionId import kotlinx.coroutines.flow.flowOf -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultEnterpriseService @Inject constructor() : EnterpriseService { +@Inject +class DefaultEnterpriseService() : EnterpriseService { override val isEnterpriseBuild = false override suspend fun isEnterpriseUser(sessionId: SessionId) = false diff --git a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt index 47f52f6ac1..6b757d9b0b 100644 --- a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt +++ b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt @@ -7,13 +7,14 @@ package io.element.android.features.enterprise.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.enterprise.api.SessionEnterpriseService import io.element.android.libraries.di.SessionScope -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultSessionEnterpriseService @Inject constructor() : SessionEnterpriseService { +@Inject +class DefaultSessionEnterpriseService() : SessionEnterpriseService { override suspend fun init() = Unit override suspend fun isElementCallAvailable(): Boolean = true } diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt index ee0a3d87ef..1f8e368fb4 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.ftue.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.ftue.api.FtueEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultFtueEntryPoint @Inject constructor() : FtueEntryPoint { +@Inject +class DefaultFtueEntryPoint() : FtueEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): FtueEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt index 71a27dcaae..a5690896b5 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt @@ -21,8 +21,8 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.newRoot import com.bumble.appyx.navmodel.backstack.operation.replace -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.analytics.api.AnalyticsEntryPoint import io.element.android.features.ftue.impl.notifications.NotificationsOptInNode @@ -34,7 +34,7 @@ import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.SessionScope import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.flow.distinctUntilChanged @@ -45,7 +45,8 @@ import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class FtueFlowNode @AssistedInject constructor( +@Inject +class FtueFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val ftueState: DefaultFtueService, @@ -158,16 +159,18 @@ class FtueFlowNode @AssistedInject constructor( BackstackView() } - @ContributesNode(AppScope::class) - class PlaceholderNode @AssistedInject constructor( - @Assisted buildContext: BuildContext, - @Assisted plugins: List, - ) : Node(buildContext, plugins = plugins) { - @Composable - override fun View(modifier: Modifier) { - Box(modifier = modifier.fillMaxSize(), contentAlignment = Alignment.Center) { - CircularProgressIndicator() - } +} + +@ContributesNode(AppScope::class) +@Inject +class PlaceholderNode( + @Assisted buildContext: BuildContext, + @Assisted plugins: List, +) : Node(buildContext, plugins = plugins) { + @Composable + override fun View(modifier: Modifier) { + Box(modifier = modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + CircularProgressIndicator() } } } 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/FtueModule.kt index 4387b3dc00..656ffac512 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/FtueModule.kt @@ -7,16 +7,16 @@ package io.element.android.features.ftue.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo import io.element.android.features.ftue.impl.sessionverification.choosemode.ChooseSelfVerificationModePresenter import io.element.android.features.ftue.impl.sessionverification.choosemode.ChooseSelfVerificationModeState import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope @ContributesTo(SessionScope::class) -@Module +@BindingContainer interface FtueModule { @Binds fun bindChooseSelfVerificationMethodPresenter(presenter: ChooseSelfVerificationModePresenter): Presenter diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInNode.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInNode.kt index 6df334b6df..a5a840af0c 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInNode.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInNode.kt @@ -12,15 +12,16 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class NotificationsOptInNode @AssistedInject constructor( +@Inject +class NotificationsOptInNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: NotificationsOptInPresenter.Factory, diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInPresenter.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInPresenter.kt index 5db0955c5a..0dbed74b02 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInPresenter.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInPresenter.kt @@ -12,9 +12,9 @@ import android.os.Build import androidx.annotation.RequiresApi import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.permissions.api.PermissionStateProvider @@ -25,7 +25,8 @@ import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class NotificationsOptInPresenter @AssistedInject constructor( +@Inject +class NotificationsOptInPresenter( permissionsPresenterFactory: PermissionsPresenter.Factory, @Assisted private val callback: NotificationsOptInNode.Callback, @AppCoroutineScope diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/FtueSessionVerificationFlowNode.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/FtueSessionVerificationFlowNode.kt index a37fdd2192..a2e238b403 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/FtueSessionVerificationFlowNode.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/FtueSessionVerificationFlowNode.kt @@ -20,8 +20,8 @@ import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.newRoot import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.appconfig.LearnMoreConfig import io.element.android.features.ftue.impl.sessionverification.choosemode.ChooseSelfVerificationModeNode @@ -37,7 +37,8 @@ import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class FtueSessionVerificationFlowNode @AssistedInject constructor( +@Inject +class FtueSessionVerificationFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val outgoingVerificationEntryPoint: OutgoingVerificationEntryPoint, diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModeNode.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModeNode.kt index 687dc4aefe..ec8251d900 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModeNode.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModeNode.kt @@ -13,15 +13,16 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.logout.api.direct.DirectLogoutView import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class ChooseSelfVerificationModeNode @AssistedInject constructor( +@Inject +class ChooseSelfVerificationModeNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: Presenter, diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModePresenter.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModePresenter.kt index 0aec3b4e1d..b316169746 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModePresenter.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModePresenter.kt @@ -17,9 +17,10 @@ import io.element.android.features.logout.api.direct.DirectLogoutState import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.encryption.EncryptionService import io.element.android.libraries.matrix.api.encryption.RecoveryState -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ChooseSelfVerificationModePresenter @Inject constructor( +@Inject +class ChooseSelfVerificationModePresenter( private val encryptionService: EncryptionService, private val directLogoutPresenter: Presenter, ) : Presenter { diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt index 744053b976..b5d8375551 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt @@ -10,12 +10,12 @@ package io.element.android.features.ftue.impl.state import android.Manifest import android.os.Build import androidx.annotation.VisibleForTesting -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.ftue.api.state.FtueService import io.element.android.features.ftue.api.state.FtueState import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus @@ -31,11 +31,12 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @SingleIn(SessionScope::class) -class DefaultFtueService @Inject constructor( +@Inject +class DefaultFtueService( private val sdkVersionProvider: BuildVersionSdkIntProvider, @SessionCoroutineScope sessionCoroutineScope: CoroutineScope, private val analyticsService: AnalyticsService, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt index 3fe5c533d7..91aac9f81a 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.home.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.home.api.HomeEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultHomeEntryPoint @Inject constructor() : HomeEntryPoint { +@Inject +class DefaultHomeEntryPoint() : HomeEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): HomeEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt index 4265114e24..f59abc64cf 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomeFlowNode.kt @@ -25,8 +25,8 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRolesEntryPoint @@ -56,7 +56,8 @@ import kotlinx.coroutines.withContext import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class HomeFlowNode @AssistedInject constructor( +@Inject +class HomeFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val matrixClient: MatrixClient, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomePresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomePresenter.kt index c5eea40796..70fe169dc1 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomePresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomePresenter.kt @@ -27,9 +27,10 @@ import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.indicator.api.IndicatorService import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.sync.SyncService -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class HomePresenter @Inject constructor( +@Inject +class HomePresenter( private val client: MatrixClient, private val syncService: SyncService, private val snackbarDispatcher: SnackbarDispatcher, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt index 3ed7c383ba..d977c29f20 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt @@ -29,10 +29,11 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds -class RoomListDataSource @Inject constructor( +@Inject +class RoomListDataSource( private val roomListService: RoomListService, private val roomListRoomSummaryFactory: RoomListRoomSummaryFactory, private val coroutineDispatchers: CoroutineDispatchers, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt index 3d77662188..d6ee322b03 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt @@ -20,9 +20,10 @@ import io.element.android.libraries.matrix.api.roomlist.RoomSummary import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.toInviteSender import kotlinx.collections.immutable.toImmutableList -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RoomListRoomSummaryFactory @Inject constructor( +@Inject +class RoomListRoomSummaryFactory( private val dateFormatter: DateFormatter, private val roomLastMessageFormatter: RoomLastMessageFormatter, ) { 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/RoomListModule.kt index ef64512462..0a919c1ab0 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/RoomListModule.kt @@ -7,9 +7,9 @@ package io.element.android.features.home.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo import io.element.android.features.home.impl.filters.RoomListFiltersPresenter import io.element.android.features.home.impl.filters.RoomListFiltersState import io.element.android.features.home.impl.roomlist.RoomListPresenter @@ -20,7 +20,7 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope @ContributesTo(SessionScope::class) -@Module +@BindingContainer interface RoomListModule { @Binds fun bindRoomListPresenter(presenter: RoomListPresenter): Presenter diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt index de3f7eaa0b..2a06270ff1 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt @@ -15,10 +15,11 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.roomlist.RoomListService import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.flow.map -import javax.inject.Inject +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.roomlist.RoomListFilter as MatrixRoomListFilter -class RoomListFiltersPresenter @Inject constructor( +@Inject +class RoomListFiltersPresenter( private val roomListService: RoomListService, private val filterSelectionStrategy: FilterSelectionStrategy, ) : Presenter { diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt index 26a77da5c7..c11b397701 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt @@ -7,14 +7,15 @@ package io.element.android.features.home.impl.filters.selection -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.home.impl.filters.RoomListFilter import io.element.android.libraries.di.SessionScope import kotlinx.coroutines.flow.MutableStateFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultFilterSelectionStrategy @Inject constructor() : FilterSelectionStrategy { +@Inject +class DefaultFilterSelectionStrategy() : FilterSelectionStrategy { private val selectedFilters = LinkedHashSet() override val filterSelectionStates = MutableStateFlow(buildFilters()) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt index ba5007c57c..e0053d9848 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt @@ -63,12 +63,13 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.takeWhile import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val EXTENDED_RANGE_SIZE = 40 private const val SUBSCRIBE_TO_VISIBLE_ROOMS_DEBOUNCE_IN_MILLIS = 300L -class RoomListPresenter @Inject constructor( +@Inject +class RoomListPresenter( private val client: MatrixClient, private val leaveRoomPresenter: Presenter, private val roomListDataSource: RoomListDataSource, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt index 6840809480..694a252754 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt @@ -20,11 +20,12 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val PAGE_SIZE = 30 -class RoomListSearchDataSource @Inject constructor( +@Inject +class RoomListSearchDataSource( roomListService: RoomListService, coroutineDispatchers: CoroutineDispatchers, private val roomSummaryFactory: RoomListRoomSummaryFactory, diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchPresenter.kt index b4d151fe02..abb22ed31f 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchPresenter.kt @@ -16,9 +16,10 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import io.element.android.libraries.architecture.Presenter import kotlinx.collections.immutable.persistentListOf -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RoomListSearchPresenter @Inject constructor( +@Inject +class RoomListSearchPresenter( private val dataSource: RoomListSearchDataSource, ) : Presenter { @Composable diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt index 716cd7f907..02d9ad9b28 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt @@ -7,7 +7,7 @@ package io.element.android.features.invite.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.libraries.core.extensions.mapFailure @@ -19,7 +19,7 @@ import io.element.android.libraries.matrix.api.exception.ClientException import io.element.android.libraries.matrix.api.exception.ErrorKind import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.push.api.notifications.NotificationCleaner -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface AcceptInvite { suspend operator fun invoke(roomId: RoomId): Result @@ -30,7 +30,8 @@ interface AcceptInvite { } @ContributesBinding(SessionScope::class) -class DefaultAcceptInvite @Inject constructor( +@Inject +class DefaultAcceptInvite( private val client: MatrixClient, private val joinRoom: JoinRoom, private val notificationCleaner: NotificationCleaner, diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DeclineInvite.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DeclineInvite.kt index 9276f37365..0a836a4958 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DeclineInvite.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DeclineInvite.kt @@ -7,13 +7,13 @@ package io.element.android.features.invite.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.push.api.notifications.NotificationCleaner -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface DeclineInvite { suspend operator fun invoke( @@ -32,7 +32,8 @@ interface DeclineInvite { } @ContributesBinding(SessionScope::class) -class DefaultDeclineInvite @Inject constructor( +@Inject +class DefaultDeclineInvite( private val client: MatrixClient, private val notificationCleaner: NotificationCleaner, private val seenInvitesStore: SeenInvitesStore, diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStoreFactory.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStoreFactory.kt index 256214e5d2..e830b124c8 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStoreFactory.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStoreFactory.kt @@ -8,20 +8,21 @@ package io.element.android.features.invite.impl import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.invite.api.SeenInvitesStore -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.sessionstorage.api.observer.SessionObserver import kotlinx.coroutines.CoroutineScope import java.util.concurrent.ConcurrentHashMap -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultSeenInvitesStoreFactory @Inject constructor( +@Inject +class DefaultSeenInvitesStoreFactory( @ApplicationContext private val context: Context, private val sessionObserver: SessionObserver, ) : SeenInvitesStoreFactory { diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInvitePresenter.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInvitePresenter.kt index 163912392e..6a9d867065 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInvitePresenter.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInvitePresenter.kt @@ -24,9 +24,10 @@ import io.element.android.libraries.architecture.runUpdatingState import io.element.android.libraries.matrix.api.core.RoomId import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class AcceptDeclineInvitePresenter @Inject constructor( +@Inject +class AcceptDeclineInvitePresenter( private val acceptInvite: AcceptInvite, private val declineInvite: DeclineInvite, ) : Presenter { diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt index e37582f63f..c06638fe56 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt @@ -9,15 +9,16 @@ package io.element.android.features.invite.impl.acceptdecline import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteView import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomId -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultAcceptDeclineInviteView @Inject constructor() : AcceptDeclineInviteView { +@Inject +class DefaultAcceptDeclineInviteView() : AcceptDeclineInviteView { @Composable override fun Render( state: AcceptDeclineInviteState, diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockNode.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockNode.kt index 100a5de4b8..7965c5f500 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockNode.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockNode.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.invite.api.InviteData import io.element.android.libraries.architecture.NodeInputs @@ -21,23 +21,24 @@ import io.element.android.libraries.architecture.inputs import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class DeclineAndBlockNode @AssistedInject constructor( +@Inject +class DeclineAndBlockNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, - presenterFactory: DeclineAndBlockPresenter.Factory, +// presenterFactory: DeclineAndBlockPresenter.Factory, ) : Node(buildContext, plugins = plugins) { data class Inputs(val inviteData: InviteData) : NodeInputs private val inviteData = inputs().inviteData - private val presenter = presenterFactory.create(inviteData) +// private val presenter = presenterFactory.create(inviteData) @Composable override fun View(modifier: Modifier) { - val state = presenter.present() - DeclineAndBlockView( - state = state, - onBackClick = ::navigateUp, - modifier = modifier - ) +// val state = presenter.present() +// DeclineAndBlockView( +// state = state, +// onBackClick = ::navigateUp, +// modifier = modifier +// ) } } diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt index 9a18aa746b..246fe0ee03 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt @@ -15,9 +15,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.invite.api.InviteData import io.element.android.features.invite.impl.DeclineInvite import io.element.android.libraries.architecture.AsyncAction @@ -28,65 +28,66 @@ import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class DeclineAndBlockPresenter @AssistedInject constructor( - @Assisted private val inviteData: InviteData, - private val declineInvite: DeclineInvite, - private val snackbarDispatcher: SnackbarDispatcher, -) : Presenter { - @AssistedFactory - interface Factory { - fun create(inviteData: InviteData): DeclineAndBlockPresenter - } - - @Composable - override fun present(): DeclineAndBlockState { - var reportReason by rememberSaveable { mutableStateOf("") } - var blockUser by rememberSaveable { mutableStateOf(true) } - var reportRoom by rememberSaveable { mutableStateOf(false) } - val declineAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } - - val coroutineScope = rememberCoroutineScope() - - fun handleEvents(event: DeclineAndBlockEvents) { - when (event) { - DeclineAndBlockEvents.ClearDeclineAction -> declineAction.value = AsyncAction.Uninitialized - DeclineAndBlockEvents.Decline -> coroutineScope.decline(reportReason, blockUser, reportRoom, declineAction) - DeclineAndBlockEvents.ToggleBlockUser -> blockUser = !blockUser - DeclineAndBlockEvents.ToggleReportRoom -> reportRoom = !reportRoom - is DeclineAndBlockEvents.UpdateReportReason -> reportReason = event.reason - } - } - - return DeclineAndBlockState( - reportRoom = reportRoom, - reportReason = reportReason, - blockUser = blockUser, - declineAction = declineAction.value, - eventSink = ::handleEvents - ) - } - - private fun CoroutineScope.decline( - reason: String, - blockUser: Boolean, - reportRoom: Boolean, - action: MutableState> - ) = launch { - action.value = AsyncAction.Loading - declineInvite( - roomId = inviteData.roomId, - blockUser = blockUser, - reportRoom = reportRoom, - reportReason = reason - ).onSuccess { - action.value = AsyncAction.Success(Unit) - }.onFailure { error -> - if (error is DeclineInvite.Exception.DeclineInviteFailed) { - action.value = AsyncAction.Failure(error) - } else { - action.value = AsyncAction.Uninitialized - snackbarDispatcher.post(SnackbarMessage(CommonStrings.error_unknown)) - } - } - } -} +//@Inject +//class DeclineAndBlockPresenter( +// @Assisted private val inviteData: InviteData, +// private val declineInvite: DeclineInvite, +// private val snackbarDispatcher: SnackbarDispatcher, +//) : Presenter { +// @AssistedFactory +// interface Factory { +// fun create(inviteData: InviteData): DeclineAndBlockPresenter +// } +// +// @Composable +// override fun present(): DeclineAndBlockState { +// var reportReason by rememberSaveable { mutableStateOf("") } +// var blockUser by rememberSaveable { mutableStateOf(true) } +// var reportRoom by rememberSaveable { mutableStateOf(false) } +// val declineAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } +// +// val coroutineScope = rememberCoroutineScope() +// +// fun handleEvents(event: DeclineAndBlockEvents) { +// when (event) { +// DeclineAndBlockEvents.ClearDeclineAction -> declineAction.value = AsyncAction.Uninitialized +// DeclineAndBlockEvents.Decline -> coroutineScope.decline(reportReason, blockUser, reportRoom, declineAction) +// DeclineAndBlockEvents.ToggleBlockUser -> blockUser = !blockUser +// DeclineAndBlockEvents.ToggleReportRoom -> reportRoom = !reportRoom +// is DeclineAndBlockEvents.UpdateReportReason -> reportReason = event.reason +// } +// } +// +// return DeclineAndBlockState( +// reportRoom = reportRoom, +// reportReason = reportReason, +// blockUser = blockUser, +// declineAction = declineAction.value, +// eventSink = ::handleEvents +// ) +// } +// +// private fun CoroutineScope.decline( +// reason: String, +// blockUser: Boolean, +// reportRoom: Boolean, +// action: MutableState> +// ) = launch { +// action.value = AsyncAction.Loading +// declineInvite( +// roomId = inviteData.roomId, +// blockUser = blockUser, +// reportRoom = reportRoom, +// reportReason = reason +// ).onSuccess { +// action.value = AsyncAction.Success(Unit) +// }.onFailure { error -> +// if (error is DeclineInvite.Exception.DeclineInviteFailed) { +// action.value = AsyncAction.Failure(error) +// } else { +// action.value = AsyncAction.Uninitialized +// snackbarDispatcher.post(SnackbarMessage(CommonStrings.error_unknown)) +// } +// } +// } +//} diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt index 5eab22dd91..5d2bc3dd72 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt @@ -9,15 +9,16 @@ package io.element.android.features.invite.impl.declineandblock import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.invite.api.InviteData import io.element.android.features.invite.api.declineandblock.DeclineInviteAndBlockEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultDeclineAndBlockEntryPoint @Inject constructor() : DeclineInviteAndBlockEntryPoint { +@Inject +class DefaultDeclineAndBlockEntryPoint() : DeclineInviteAndBlockEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext, inviteData: InviteData): Node { val inputs = DeclineAndBlockNode.Inputs(inviteData) return parentNode.createNode(buildContext, plugins = listOf(inputs)) 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/InviteModule.kt index 4f5da603a6..d1af822966 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/InviteModule.kt @@ -7,10 +7,10 @@ package io.element.android.features.invite.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState import io.element.android.features.invite.impl.SeenInvitesStoreFactory @@ -20,7 +20,7 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient @ContributesTo(SessionScope::class) -@Module +@BindingContainer interface InviteModule { @Binds fun bindAcceptDeclinePresenter(presenter: AcceptDeclineInvitePresenter): Presenter diff --git a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeoplePresenter.kt b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeoplePresenter.kt index 8961e1157f..718610f24b 100644 --- a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeoplePresenter.kt +++ b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeoplePresenter.kt @@ -16,10 +16,10 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.invitepeople.api.InvitePeopleEvents import io.element.android.features.invitepeople.api.InvitePeoplePresenter import io.element.android.features.invitepeople.api.InvitePeopleState @@ -49,7 +49,8 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -class DefaultInvitePeoplePresenter @AssistedInject constructor( +@Inject +class DefaultInvitePeoplePresenter( @Assisted private val joinedRoom: JoinedRoom?, @Assisted private val roomId: RoomId, private val userRepository: UserRepository, diff --git a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt index 8207e75fd5..484a02d12c 100644 --- a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt +++ b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt @@ -9,14 +9,15 @@ package io.element.android.features.invitepeople.impl import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.invitepeople.api.InvitePeopleRenderer import io.element.android.features.invitepeople.api.InvitePeopleState import io.element.android.libraries.di.SessionScope -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultInvitePeopleRenderer @Inject constructor() : InvitePeopleRenderer { +@Inject +class DefaultInvitePeopleRenderer() : InvitePeopleRenderer { @Composable override fun Render(state: InvitePeopleState, modifier: Modifier) { if (state is DefaultInvitePeopleState) { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt index e28b2affe8..20ff02cd91 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt @@ -9,14 +9,15 @@ package io.element.android.features.joinroom.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.joinroom.api.JoinRoomEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultJoinRoomEntryPoint @Inject constructor() : JoinRoomEntryPoint { +@Inject +class DefaultJoinRoomEntryPoint() : JoinRoomEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: JoinRoomEntryPoint.Inputs): Node { return parentNode.createNode( buildContext = buildContext, diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomFlowNode.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomFlowNode.kt index ecd4c920c8..1efdfad2a9 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomFlowNode.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomFlowNode.kt @@ -16,8 +16,8 @@ import com.bumble.appyx.core.node.node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.invite.api.InviteData import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteView @@ -30,7 +30,8 @@ import io.element.android.libraries.di.SessionScope import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class JoinRoomFlowNode @AssistedInject constructor( +@Inject +class JoinRoomFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: JoinRoomPresenter.Factory, diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index 6206c2426a..04e5b904e6 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -20,8 +20,8 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents @@ -54,7 +54,8 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import java.util.Optional -class JoinRoomPresenter @AssistedInject constructor( +@Inject +class JoinRoomPresenter( @Assisted private val roomId: RoomId, @Assisted private val roomIdOrAlias: RoomIdOrAlias, @Assisted private val roomDescription: Optional, diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/CancelKnockRoom.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/CancelKnockRoom.kt index 7826a819c6..0a21b538cf 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/CancelKnockRoom.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/CancelKnockRoom.kt @@ -7,18 +7,19 @@ package io.element.android.features.joinroom.impl.di -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface CancelKnockRoom { suspend operator fun invoke(roomId: RoomId): Result } @ContributesBinding(SessionScope::class) -class DefaultCancelKnockRoom @Inject constructor(private val client: MatrixClient) : CancelKnockRoom { +@Inject +class DefaultCancelKnockRoom(private val client: MatrixClient) : CancelKnockRoom { override suspend fun invoke(roomId: RoomId): Result { return client .getRoom(roomId) diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt index ac17e2c3e2..0dad908daa 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt @@ -7,18 +7,19 @@ package io.element.android.features.joinroom.impl.di -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface ForgetRoom { suspend operator fun invoke(roomId: RoomId): Result } @ContributesBinding(SessionScope::class) -class DefaultForgetRoom @Inject constructor(private val client: MatrixClient) : ForgetRoom { +@Inject +class DefaultForgetRoom(private val client: MatrixClient) : ForgetRoom { override suspend fun invoke(roomId: RoomId): Result { return client.getRoom(roomId)?.use { it.forget() } ?: Result.failure(IllegalStateException("Room not found")) 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/JoinRoomModule.kt index 5e85c0abbc..a3a4a778f0 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/JoinRoomModule.kt @@ -7,9 +7,9 @@ package io.element.android.features.joinroom.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState @@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.room.join.JoinRoom import java.util.Optional -@Module +@BindingContainer @ContributesTo(SessionScope::class) object JoinRoomModule { @Provides diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt index 471ef51a53..738f0de1d2 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt @@ -7,11 +7,11 @@ package io.element.android.features.joinroom.impl.di -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomIdOrAlias -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface KnockRoom { suspend operator fun invoke( @@ -22,7 +22,8 @@ interface KnockRoom { } @ContributesBinding(SessionScope::class) -class DefaultKnockRoom @Inject constructor(private val client: MatrixClient) : KnockRoom { +@Inject +class DefaultKnockRoom(private val client: MatrixClient) : KnockRoom { override suspend fun invoke( roomIdOrAlias: RoomIdOrAlias, message: String, diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/DefaultKnockRequestsBannerRenderer.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/DefaultKnockRequestsBannerRenderer.kt index 994ba025a0..3654b43a59 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/DefaultKnockRequestsBannerRenderer.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/DefaultKnockRequestsBannerRenderer.kt @@ -9,13 +9,14 @@ package io.element.android.features.knockrequests.impl.banner import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.knockrequests.api.banner.KnockRequestsBannerRenderer import io.element.android.libraries.di.RoomScope -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) -class DefaultKnockRequestsBannerRenderer @Inject constructor( +@Inject +class DefaultKnockRequestsBannerRenderer( private val presenter: KnockRequestsBannerPresenter, ) : KnockRequestsBannerRenderer { @Composable diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerPresenter.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerPresenter.kt index 737a3b0562..40d1990a20 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerPresenter.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerPresenter.kt @@ -23,11 +23,12 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val ACCEPT_ERROR_DISPLAY_DURATION = 1500L -class KnockRequestsBannerPresenter @Inject constructor( +@Inject +class KnockRequestsBannerPresenter( private val knockRequestsService: KnockRequestsService, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, 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/KnockRequestsModule.kt index 671208e97b..0fdf6045e8 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/KnockRequestsModule.kt @@ -7,16 +7,16 @@ package io.element.android.features.knockrequests.impl.data -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +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.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.room.JoinedRoom -@Module +@BindingContainer @ContributesTo(RoomScope::class) object KnockRequestsModule { @Provides diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt index e5181be27c..dc36750f7e 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt @@ -9,14 +9,15 @@ package io.element.android.features.knockrequests.impl.list import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.knockrequests.api.list.KnockRequestsListEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultKnockRequestsListEntryPoint @Inject constructor() : KnockRequestsListEntryPoint { +@Inject +class DefaultKnockRequestsListEntryPoint() : KnockRequestsListEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext): Node { return parentNode.createNode(buildContext) } diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListNode.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListNode.kt index 52cc5eb928..9dc37ddd65 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListNode.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListNode.kt @@ -12,13 +12,14 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.RoomScope @ContributesNode(RoomScope::class) -class KnockRequestsListNode @AssistedInject constructor( +@Inject +class KnockRequestsListNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: KnockRequestsListPresenter, diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt index aa537384b9..7017fed054 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt @@ -22,9 +22,10 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runUpdatingState import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class KnockRequestsListPresenter @Inject constructor( +@Inject +class KnockRequestsListPresenter( private val knockRequestsService: KnockRequestsService, ) : Presenter { @Composable diff --git a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt index 254a3af1ad..cc5104cb57 100644 --- a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt +++ b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt @@ -9,15 +9,16 @@ package io.element.android.features.leaveroom.impl import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.leaveroom.api.LeaveRoomRenderer import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomId -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class InternalLeaveRoomRenderer @Inject constructor() : LeaveRoomRenderer { +@Inject +class InternalLeaveRoomRenderer() : LeaveRoomRenderer { @Composable override fun Render(state: LeaveRoomState, onSelectNewOwners: (RoomId) -> Unit, modifier: Modifier) { if (state is InternalLeaveRoomState) { diff --git a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt index d1575aac91..2fc75d8b2b 100644 --- a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt +++ b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt @@ -29,9 +29,10 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class LeaveRoomPresenter @Inject constructor( +@Inject +class LeaveRoomPresenter( private val client: MatrixClient, private val dispatchers: CoroutineDispatchers, private val notificationConversationService: NotificationConversationService, diff --git a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomModule.kt b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomModule.kt index 840c7a9eec..4de7e4ef62 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/LeaveRoomModule.kt @@ -7,16 +7,16 @@ package io.element.android.features.leaveroom.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.impl.LeaveRoomPresenter import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope @ContributesTo(SessionScope::class) -@Module +@BindingContainer interface LeaveRoomModule { @Binds fun bindLeaveRoomPresenter(presenter: LeaveRoomPresenter): Presenter diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt index 170e819ce7..83f36a65fe 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt @@ -9,14 +9,15 @@ package io.element.android.features.licenses.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.licenses.api.OpenSourceLicensesEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultOpenSourcesLicensesEntryPoint @Inject constructor() : OpenSourceLicensesEntryPoint { +@Inject +class DefaultOpenSourcesLicensesEntryPoint() : OpenSourceLicensesEntryPoint { override fun getNode(node: Node, buildContext: BuildContext): Node { return node.createNode(buildContext) } diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DependenciesFlowNode.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DependenciesFlowNode.kt index 91cab27de9..89df0eb399 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DependenciesFlowNode.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DependenciesFlowNode.kt @@ -15,8 +15,8 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.licenses.impl.details.DependenciesDetailsNode import io.element.android.features.licenses.impl.list.DependencyLicensesListNode @@ -24,11 +24,12 @@ import io.element.android.features.licenses.impl.model.DependencyLicenseItem import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.parcelize.Parcelize @ContributesNode(AppScope::class) -class DependenciesFlowNode @AssistedInject constructor( +@Inject +class DependenciesFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : BaseFlowNode( diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/LicensesProvider.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/LicensesProvider.kt index 4c4db861e9..92b8d0afd1 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/LicensesProvider.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/LicensesProvider.kt @@ -8,23 +8,24 @@ package io.element.android.features.licenses.impl import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.licenses.impl.model.DependencyLicenseItem import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.withContext import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface LicensesProvider { suspend fun provides(): List } @ContributesBinding(AppScope::class) -class AssetLicensesProvider @Inject constructor( +@Inject +class AssetLicensesProvider( @ApplicationContext private val context: Context, private val dispatchers: CoroutineDispatchers, ) : LicensesProvider { diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsNode.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsNode.kt index ae9ad03e9d..f8a268cb74 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsNode.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsNode.kt @@ -12,16 +12,17 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.licenses.impl.model.DependencyLicenseItem import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class DependenciesDetailsNode @AssistedInject constructor( +@Inject +class DependenciesDetailsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : Node( diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListNode.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListNode.kt index 039ac24b20..9efe5141b1 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListNode.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListNode.kt @@ -13,14 +13,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.licenses.impl.model.DependencyLicenseItem -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class DependencyLicensesListNode @AssistedInject constructor( +@Inject +class DependencyLicensesListNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: DependencyLicensesListPresenter, diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt index a0d3a19ed2..ee402f7d9b 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt @@ -20,9 +20,10 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.extensions.runCatchingExceptions import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toPersistentList -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class DependencyLicensesListPresenter @Inject constructor( +@Inject +class DependencyLicensesListPresenter( private val licensesProvider: LicensesProvider, ) : Presenter { @Composable diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt index e662ef8115..3e35712239 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt @@ -7,14 +7,15 @@ package io.element.android.features.location.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.location.api.BuildConfig import io.element.android.features.location.api.LocationService -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultLocationService @Inject constructor() : LocationService { +@Inject +class DefaultLocationService() : LocationService { override fun isServiceAvailable(): Boolean { return BuildConfig.MAPTILER_API_KEY.isNotEmpty() } diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActions.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActions.kt index 21cc8df7bd..3b8b5b7f01 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActions.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActions.kt @@ -12,18 +12,19 @@ import android.content.Intent import android.net.Uri import androidx.annotation.VisibleForTesting import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.location.api.Location import io.element.android.libraries.androidutils.system.openAppSettingsPage import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber import java.util.Locale -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class AndroidLocationActions @Inject constructor( +@Inject +class AndroidLocationActions( @ApplicationContext private val context: Context ) : LocationActions { override fun share(location: Location, label: String?) { diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/permissions/DefaultPermissionsPresenter.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/permissions/DefaultPermissionsPresenter.kt index fe6c24f6a7..6bd594ad3b 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/permissions/DefaultPermissionsPresenter.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/permissions/DefaultPermissionsPresenter.kt @@ -11,14 +11,15 @@ import androidx.compose.runtime.Composable import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.rememberMultiplePermissionsState -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope @Suppress("unused") -class DefaultPermissionsPresenter @AssistedInject constructor( +@Inject +class DefaultPermissionsPresenter( @Assisted private val permissions: List ) : PermissionsPresenter { @AssistedFactory diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt index cf601a412e..6a85229b01 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt @@ -9,15 +9,16 @@ package io.element.android.features.location.impl.send import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.location.api.SendLocationEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.timeline.Timeline -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultSendLocationEntryPoint @Inject constructor() : SendLocationEntryPoint { +@Inject +class DefaultSendLocationEntryPoint() : SendLocationEntryPoint { override fun builder(timelineMode: Timeline.Mode): SendLocationEntryPoint.Builder { return Builder(timelineMode) } diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationNode.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationNode.kt index 97e78fcb07..c3f0ec7892 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationNode.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs @@ -24,7 +24,8 @@ import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(RoomScope::class) -class SendLocationNode @AssistedInject constructor( +@Inject +class SendLocationNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: SendLocationPresenter.Factory, diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationPresenter.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationPresenter.kt index 2619352af1..15f858ecff 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationPresenter.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/SendLocationPresenter.kt @@ -15,9 +15,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Composer import io.element.android.features.location.impl.common.MapDefaults import io.element.android.features.location.impl.common.actions.LocationActions @@ -36,7 +36,8 @@ import io.element.android.libraries.textcomposer.model.MessageComposerMode import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.launch -class SendLocationPresenter @AssistedInject constructor( +@Inject +class SendLocationPresenter( permissionsPresenterFactory: PermissionsPresenter.Factory, private val room: JoinedRoom, @Assisted private val timelineMode: Timeline.Mode, diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt index ea45ef2690..59aff8f6a3 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt @@ -9,14 +9,15 @@ package io.element.android.features.location.impl.show import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.location.api.ShowLocationEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultShowLocationEntryPoint @Inject constructor() : ShowLocationEntryPoint { +@Inject +class DefaultShowLocationEntryPoint() : ShowLocationEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: ShowLocationEntryPoint.Inputs): Node { return parentNode.createNode(buildContext, listOf(inputs)) } diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationNode.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationNode.kt index 1a74130eb0..000d6dd908 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationNode.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.location.api.ShowLocationEntryPoint @@ -23,7 +23,8 @@ import io.element.android.libraries.di.RoomScope import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(RoomScope::class) -class ShowLocationNode @AssistedInject constructor( +@Inject +class ShowLocationNode( presenterFactory: ShowLocationPresenter.Factory, analyticsService: AnalyticsService, @Assisted buildContext: BuildContext, diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationPresenter.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationPresenter.kt index 152a201ad2..af89331c6f 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationPresenter.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/ShowLocationPresenter.kt @@ -14,9 +14,9 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.location.api.Location import io.element.android.features.location.impl.common.MapDefaults import io.element.android.features.location.impl.common.actions.LocationActions @@ -26,7 +26,8 @@ import io.element.android.features.location.impl.common.permissions.PermissionsS import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta -class ShowLocationPresenter @AssistedInject constructor( +@Inject +class ShowLocationPresenter( permissionsPresenterFactory: PermissionsPresenter.Factory, private val locationActions: LocationActions, private val buildMeta: BuildMeta, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt index 907ed9fa84..41f3aedf32 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt @@ -11,15 +11,16 @@ import android.content.Context import android.content.Intent import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.lockscreen.api.LockScreenEntryPoint import io.element.android.features.lockscreen.impl.unlock.activity.PinUnlockActivity import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultLockScreenEntryPoint @Inject constructor() : LockScreenEntryPoint { +@Inject +class DefaultLockScreenEntryPoint() : LockScreenEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext, navTarget: LockScreenEntryPoint.Target): LockScreenEntryPoint.NodeBuilder { val callbacks = mutableListOf() diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt index 8be72a113e..ea00091721 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt @@ -7,7 +7,7 @@ package io.element.android.features.lockscreen.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.lockscreen.api.LockScreenLockState import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticatorManager @@ -15,8 +15,8 @@ import io.element.android.features.lockscreen.impl.biometric.DefaultBiometricUnl import io.element.android.features.lockscreen.impl.pin.DefaultPinCodeManagerCallback import io.element.android.features.lockscreen.impl.pin.PinCodeManager import io.element.android.features.lockscreen.impl.storage.LockScreenStore -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver @@ -30,12 +30,13 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultLockScreenService @Inject constructor( +@Inject +class DefaultLockScreenService( private val lockScreenConfig: LockScreenConfig, private val lockScreenStore: LockScreenStore, private val pinCodeManager: PinCodeManager, 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 de20b6f09a..3f1f55aa1f 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 @@ -7,10 +7,10 @@ package io.element.android.features.lockscreen.impl -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import dev.zacsweers.metro.AppScope import kotlin.time.Duration import io.element.android.appconfig.LockScreenConfig as AppConfigLockScreenConfig @@ -25,7 +25,7 @@ data class LockScreenConfig( ) @ContributesTo(AppScope::class) -@Module +@BindingContainer object LockScreenConfigModule { @Provides fun providesLockScreenConfig(): LockScreenConfig = LockScreenConfig( diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/LockScreenFlowNode.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/LockScreenFlowNode.kt index 56eaeb5472..5ddba79abd 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/LockScreenFlowNode.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/LockScreenFlowNode.kt @@ -15,8 +15,8 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.lockscreen.api.LockScreenEntryPoint import io.element.android.features.lockscreen.impl.settings.LockScreenSettingsFlowNode @@ -29,7 +29,8 @@ import io.element.android.libraries.di.SessionScope import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class LockScreenFlowNode @AssistedInject constructor( +@Inject +class LockScreenFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : BaseFlowNode( diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/biometric/DefaultBiometricAuthenticatorManager.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/biometric/DefaultBiometricAuthenticatorManager.kt index a817faf353..e48b2eef34 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/biometric/DefaultBiometricAuthenticatorManager.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/biometric/DefaultBiometricAuthenticatorManager.kt @@ -22,27 +22,28 @@ import androidx.compose.ui.res.stringResource import androidx.core.content.getSystemService import androidx.fragment.app.FragmentActivity import androidx.lifecycle.compose.LocalLifecycleOwner -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.lockscreen.impl.LockScreenConfig import io.element.android.features.lockscreen.impl.R import io.element.android.features.lockscreen.impl.storage.LockScreenStore import io.element.android.libraries.cryptography.api.EncryptionDecryptionService import io.element.android.libraries.cryptography.api.SecretKeyRepository -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import java.util.concurrent.CopyOnWriteArrayList -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val SECRET_KEY_ALIAS = "elementx.SECRET_KEY_ALIAS_BIOMETRIC" @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class DefaultBiometricAuthenticatorManager @Inject constructor( +@Inject +class DefaultBiometricAuthenticatorManager( @ApplicationContext private val context: Context, private val lockScreenStore: LockScreenStore, private val lockScreenConfig: LockScreenConfig, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/DefaultPinCodeManager.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/DefaultPinCodeManager.kt index 6dfd1e3e23..571ffeff8d 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/DefaultPinCodeManager.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/DefaultPinCodeManager.kt @@ -7,22 +7,23 @@ package io.element.android.features.lockscreen.impl.pin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.lockscreen.impl.storage.LockScreenStore import io.element.android.libraries.cryptography.api.EncryptionDecryptionService import io.element.android.libraries.cryptography.api.EncryptionResult import io.element.android.libraries.cryptography.api.SecretKeyRepository -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.Flow import java.util.concurrent.CopyOnWriteArrayList -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val SECRET_KEY_ALIAS = "elementx.SECRET_KEY_ALIAS_PIN_CODE" @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class DefaultPinCodeManager @Inject constructor( +@Inject +class DefaultPinCodeManager( private val secretKeyRepository: SecretKeyRepository, private val encryptionDecryptionService: EncryptionDecryptionService, private val lockScreenStore: LockScreenStore, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsFlowNode.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsFlowNode.kt index 79a8c997c4..e421090c45 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsFlowNode.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsFlowNode.kt @@ -19,8 +19,8 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.newRoot import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.lockscreen.impl.pin.DefaultPinCodeManagerCallback import io.element.android.features.lockscreen.impl.pin.PinCodeManager @@ -35,7 +35,8 @@ import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class LockScreenSettingsFlowNode @AssistedInject constructor( +@Inject +class LockScreenSettingsFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val pinCodeManager: PinCodeManager, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsNode.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsNode.kt index 937927bb74..c6855bc0a9 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsNode.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsNode.kt @@ -13,13 +13,14 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class LockScreenSettingsNode @AssistedInject constructor( +@Inject +class LockScreenSettingsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: LockScreenSettingsPresenter, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsPresenter.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsPresenter.kt index 9f44b03a10..0618f5d834 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsPresenter.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsPresenter.kt @@ -23,9 +23,10 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class LockScreenSettingsPresenter @Inject constructor( +@Inject +class LockScreenSettingsPresenter( private val lockScreenConfig: LockScreenConfig, private val pinCodeManager: PinCodeManager, private val lockScreenStore: LockScreenStore, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/LockScreenSetupFlowNode.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/LockScreenSetupFlowNode.kt index d6df41820f..c1cd956617 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/LockScreenSetupFlowNode.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/LockScreenSetupFlowNode.kt @@ -17,8 +17,8 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.newRoot -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticatorManager import io.element.android.features.lockscreen.impl.pin.DefaultPinCodeManagerCallback @@ -32,7 +32,8 @@ import io.element.android.libraries.di.SessionScope import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class LockScreenSetupFlowNode @AssistedInject constructor( +@Inject +class LockScreenSetupFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val pinCodeManager: PinCodeManager, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricNode.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricNode.kt index eaa2189cc0..7c59c49831 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricNode.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricNode.kt @@ -14,13 +14,14 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class SetupBiometricNode @AssistedInject constructor( +@Inject +class SetupBiometricNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: SetupBiometricPresenter, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricPresenter.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricPresenter.kt index d10485112d..5bbe5c9400 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricPresenter.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricPresenter.kt @@ -18,9 +18,10 @@ import io.element.android.features.lockscreen.impl.biometric.BiometricAuthentica import io.element.android.features.lockscreen.impl.storage.LockScreenStore import io.element.android.libraries.architecture.Presenter import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class SetupBiometricPresenter @Inject constructor( +@Inject +class SetupBiometricPresenter( private val lockScreenStore: LockScreenStore, private val biometricAuthenticatorManager: BiometricAuthenticatorManager, ) : Presenter { diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinNode.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinNode.kt index 5a4309c7be..2432a65e27 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinNode.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinNode.kt @@ -12,13 +12,14 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class SetupPinNode @AssistedInject constructor( +@Inject +class SetupPinNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: SetupPinPresenter, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinPresenter.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinPresenter.kt index b280c00957..1206b23d59 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinPresenter.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinPresenter.kt @@ -21,14 +21,15 @@ import io.element.android.features.lockscreen.impl.setup.pin.validation.SetupPin import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta import kotlinx.coroutines.delay -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Some time for the ui to refresh before showing confirmation step. */ private const val DELAY_BEFORE_CONFIRMATION_STEP_IN_MILLIS = 100L -class SetupPinPresenter @Inject constructor( +@Inject +class SetupPinPresenter( private val lockScreenConfig: LockScreenConfig, private val pinValidator: PinValidator, private val buildMeta: BuildMeta, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/validation/PinValidator.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/validation/PinValidator.kt index 9716af0ac6..62f728d27d 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/validation/PinValidator.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/validation/PinValidator.kt @@ -9,9 +9,10 @@ package io.element.android.features.lockscreen.impl.setup.pin.validation import io.element.android.features.lockscreen.impl.LockScreenConfig import io.element.android.features.lockscreen.impl.pin.model.PinEntry -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PinValidator @Inject constructor(private val lockScreenConfig: LockScreenConfig) { +@Inject +class PinValidator(private val lockScreenConfig: LockScreenConfig) { sealed interface Result { data object Valid : Result data class Invalid(val failure: SetupPinFailure) : Result diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/storage/PreferencesLockScreenStore.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/storage/PreferencesLockScreenStore.kt index a2ccccf984..dbe51d3222 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/storage/PreferencesLockScreenStore.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/storage/PreferencesLockScreenStore.kt @@ -12,17 +12,18 @@ import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.intPreferencesKey import androidx.datastore.preferences.core.stringPreferencesKey -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.lockscreen.impl.LockScreenConfig -import io.element.android.libraries.di.AppScope import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map -import javax.inject.Inject @ContributesBinding(AppScope::class) -class PreferencesLockScreenStore @Inject constructor( +@Inject +class PreferencesLockScreenStore( preferenceDataStoreFactory: PreferenceDataStoreFactory, private val lockScreenConfig: LockScreenConfig, ) : LockScreenStore { diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockHelper.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockHelper.kt index 0f3da02a7e..9bee9cc625 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockHelper.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockHelper.kt @@ -15,9 +15,10 @@ import io.element.android.features.lockscreen.impl.biometric.BiometricAuthentica import io.element.android.features.lockscreen.impl.biometric.DefaultBiometricUnlockCallback import io.element.android.features.lockscreen.impl.pin.DefaultPinCodeManagerCallback import io.element.android.features.lockscreen.impl.pin.PinCodeManager -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PinUnlockHelper @Inject constructor( +@Inject +class PinUnlockHelper( private val biometricAuthenticatorManager: BiometricAuthenticatorManager, private val pinCodeManager: PinCodeManager ) { diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockNode.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockNode.kt index cea53bb844..8ce2edb15a 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockNode.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockNode.kt @@ -14,13 +14,14 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class PinUnlockNode @AssistedInject constructor( +@Inject +class PinUnlockNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: PinUnlockPresenter, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockPresenter.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockPresenter.kt index 707ca6b710..965e712506 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockPresenter.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockPresenter.kt @@ -29,9 +29,10 @@ import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PinUnlockPresenter @Inject constructor( +@Inject +class PinUnlockPresenter( private val pinCodeManager: PinCodeManager, private val biometricAuthenticatorManager: BiometricAuthenticatorManager, private val logoutUseCase: LogoutUseCase, diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt index dd273ebac1..000ad930e5 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt @@ -26,7 +26,7 @@ import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.theme.ElementThemeApp import io.element.android.libraries.preferences.api.store.AppPreferencesStore import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject class PinUnlockActivity : AppCompatActivity() { internal companion object { diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/di/PinUnlockBindings.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/di/PinUnlockBindings.kt index 9f538dfd3f..d40d5cf662 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/di/PinUnlockBindings.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/di/PinUnlockBindings.kt @@ -7,9 +7,9 @@ package io.element.android.features.lockscreen.impl.unlock.di -import com.squareup.anvil.annotations.ContributesTo +import dev.zacsweers.metro.ContributesTo import io.element.android.features.lockscreen.impl.unlock.activity.PinUnlockActivity -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) interface PinUnlockBindings { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt index b6eca77a49..601b8f7bbf 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.login.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.login.api.LoginEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultLoginEntryPoint @Inject constructor() : LoginEntryPoint { +@Inject +class DefaultLoginEntryPoint() : LoginEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): LoginEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt index 4b17980fa6..3674a96b90 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt @@ -8,14 +8,15 @@ package io.element.android.features.login.impl import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.login.api.LoginIntentResolver import io.element.android.features.login.api.LoginParams -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultLoginIntentResolver @Inject constructor() : LoginIntentResolver { +@Inject +class DefaultLoginIntentResolver() : LoginIntentResolver { override fun parse(uriString: String): LoginParams? { val uri = uriString.toUri() if (uri.host != "mobile.element.io") return null diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt index c6d80a4238..a933b5e093 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt @@ -22,8 +22,8 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.singleTop -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ElementTheme import io.element.android.features.login.api.LoginEntryPoint @@ -42,7 +42,7 @@ import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcActionFlow @@ -51,7 +51,8 @@ import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize @ContributesNode(AppScope::class) -class LoginFlowNode @AssistedInject constructor( +@Inject +class LoginFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val accountProviderDataSource: AccountProviderDataSource, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accesscontrol/DefaultAccountProviderAccessControl.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accesscontrol/DefaultAccountProviderAccessControl.kt index bda1fa1c4b..a914e7186a 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accesscontrol/DefaultAccountProviderAccessControl.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accesscontrol/DefaultAccountProviderAccessControl.kt @@ -7,17 +7,18 @@ package io.element.android.features.login.impl.accesscontrol -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.login.api.accesscontrol.AccountProviderAccessControl import io.element.android.features.login.impl.changeserver.AccountProviderAccessException import io.element.android.libraries.core.uri.ensureProtocol -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.wellknown.api.WellknownRetriever -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultAccountProviderAccessControl @Inject constructor( +@Inject +class DefaultAccountProviderAccessControl( private val enterpriseService: EnterpriseService, private val wellknownRetriever: WellknownRetriever, ) : AccountProviderAccessControl { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt index 9ebc246e25..76799b5056 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt @@ -9,15 +9,16 @@ package io.element.android.features.login.impl.accountprovider import io.element.android.appconfig.AuthenticationConfig import io.element.android.features.enterprise.api.EnterpriseService -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) -class AccountProviderDataSource @Inject constructor( +@Inject +class AccountProviderDataSource( enterpriseService: EnterpriseService, ) { private val defaultAccountProvider = diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt index 3b75ee2578..11d0fdb1aa 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt @@ -22,9 +22,10 @@ import io.element.android.libraries.architecture.runCatchingUpdatingState import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ChangeServerPresenter @Inject constructor( +@Inject +class ChangeServerPresenter( private val authenticationService: MatrixAuthenticationService, private val accountProviderDataSource: AccountProviderDataSource, private val defaultAccountProviderAccessControl: DefaultAccountProviderAccessControl, 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/LoginModule.kt index 13835ea65c..93e9abd0c7 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/LoginModule.kt @@ -7,16 +7,16 @@ package io.element.android.features.login.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo import io.element.android.features.login.impl.changeserver.ChangeServerPresenter import io.element.android.features.login.impl.changeserver.ChangeServerState import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) -@Module +@BindingContainer interface LoginModule { @Binds fun bindChangeServerPresenter(presenter: ChangeServerPresenter): Presenter diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginBindings.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginBindings.kt index cc328d6e86..c3c189f2c8 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginBindings.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginBindings.kt @@ -7,7 +7,7 @@ package io.element.android.features.login.impl.di -import com.squareup.anvil.annotations.ContributesTo +import dev.zacsweers.metro.ContributesTo import io.element.android.features.login.impl.qrcode.QrCodeLoginManager @ContributesTo(QrCodeLoginScope::class) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt index 7f1ffc0285..37fc260f55 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt @@ -7,22 +7,18 @@ package io.element.android.features.login.impl.di -import com.squareup.anvil.annotations.ContributesTo -import com.squareup.anvil.annotations.MergeSubcomponent +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.GraphExtension import io.element.android.libraries.architecture.NodeFactoriesBindings -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn @SingleIn(QrCodeLoginScope::class) -@MergeSubcomponent(QrCodeLoginScope::class) +@GraphExtension(QrCodeLoginScope::class) interface QrCodeLoginComponent : NodeFactoriesBindings { - @MergeSubcomponent.Builder - interface Builder { - fun build(): QrCodeLoginComponent - } - @ContributesTo(AppScope::class) - interface ParentBindings { - fun qrCodeLoginComponentBuilder(): Builder + @GraphExtension.Factory + interface Factory { + fun create(): QrCodeLoginComponent } } diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt index 2c7ca227ec..672cc8aba1 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt @@ -26,7 +26,7 @@ import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcActionFlow import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * This class is responsible for managing the login flow, including handling OIDC actions and @@ -34,7 +34,8 @@ import javax.inject.Inject * It's a helper to avoid code duplication. It is used by [OnBoardingPresenter], [ConfirmAccountProviderPresenter] * and [ChooseAccountProviderPresenter]. */ -class LoginHelper @Inject constructor( +@Inject +class LoginHelper( private val oidcActionFlow: OidcActionFlow, private val authenticationService: MatrixAuthenticationService, private val webClientUrlForAuthenticationRetriever: WebClientUrlForAuthenticationRetriever, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/DefaultQrCodeLoginManager.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/DefaultQrCodeLoginManager.kt index 6628a63254..6e54395c71 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/DefaultQrCodeLoginManager.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/DefaultQrCodeLoginManager.kt @@ -7,9 +7,9 @@ package io.element.android.features.login.impl.qrcode -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.login.impl.di.QrCodeLoginScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep @@ -17,11 +17,12 @@ import io.element.android.libraries.matrix.api.auth.qrlogin.QrLoginException import io.element.android.libraries.matrix.api.core.SessionId import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(QrCodeLoginScope::class) @ContributesBinding(QrCodeLoginScope::class) -class DefaultQrCodeLoginManager @Inject constructor( +@Inject +class DefaultQrCodeLoginManager( private val authenticationService: MatrixAuthenticationService, ) : QrCodeLoginManager { private val _currentLoginStep = MutableStateFlow(QrCodeLoginStep.Uninitialized) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt index 0b965a3065..01a11ac638 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt @@ -21,8 +21,9 @@ import com.bumble.appyx.navmodel.backstack.operation.newRoot import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.replace -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.di.QrCodeLoginBindings import io.element.android.features.login.impl.di.QrCodeLoginComponent @@ -37,7 +38,6 @@ import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.bindings import io.element.android.libraries.architecture.createNode import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.DaggerComponentOwner import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep @@ -49,10 +49,11 @@ import kotlinx.parcelize.Parcelize import timber.log.Timber @ContributesNode(AppScope::class) -class QrCodeLoginFlowNode @AssistedInject constructor( +@Inject +class QrCodeLoginFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, - qrCodeLoginComponentBuilder: QrCodeLoginComponent.Builder, + qrCodeLoginComponentBuilder: QrCodeLoginComponent.Factory, private val coroutineDispatchers: CoroutineDispatchers, ) : BaseFlowNode( backstack = BackStack( @@ -64,7 +65,7 @@ class QrCodeLoginFlowNode @AssistedInject constructor( ), DaggerComponentOwner { private var authenticationJob: Job? = null - override val daggerComponent = qrCodeLoginComponentBuilder.build() + override val daggerComponent = qrCodeLoginComponentBuilder.create() private val qrCodeLoginManager by lazy { bindings().qrCodeLoginManager() } sealed interface NavTarget : Parcelable { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/resolver/HomeserverResolver.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/resolver/HomeserverResolver.kt index 56b7391102..d929858351 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/resolver/HomeserverResolver.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/resolver/HomeserverResolver.kt @@ -21,12 +21,13 @@ import kotlinx.coroutines.flow.flow import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeout import java.util.Collections -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Resolve homeserver base on search terms. */ -class HomeserverResolver @Inject constructor( +@Inject +class HomeserverResolver( private val dispatchers: CoroutineDispatchers, private val wellknownRetriever: WellknownRetriever, ) { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderNode.kt index 1ef6508bd2..e8135751db 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderNode.kt @@ -14,14 +14,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class ChangeAccountProviderNode @AssistedInject constructor( +@Inject +class ChangeAccountProviderNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: ChangeAccountProviderPresenter, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt index bb3da316b1..3dc45db866 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt @@ -16,9 +16,10 @@ import io.element.android.features.login.impl.accountprovider.AccountProvider import io.element.android.features.login.impl.changeserver.ChangeServerState import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.uri.ensureProtocol -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ChangeAccountProviderPresenter @Inject constructor( +@Inject +class ChangeAccountProviderPresenter( private val changeServerPresenter: Presenter, private val enterpriseService: EnterpriseService, ) : Presenter { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderNode.kt index 2189252d01..207539409f 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderNode.kt @@ -14,15 +14,16 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails @ContributesNode(AppScope::class) -class ChooseAccountProviderNode @AssistedInject constructor( +@Inject +class ChooseAccountProviderNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: ChooseAccountProviderPresenter, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenter.kt index 464e30936f..e7aa729bc2 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenter.kt @@ -20,9 +20,10 @@ import io.element.android.features.login.impl.login.LoginHelper import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.uri.ensureProtocol -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ChooseAccountProviderPresenter @Inject constructor( +@Inject +class ChooseAccountProviderPresenter( private val enterpriseService: EnterpriseService, private val loginHelper: LoginHelper, ) : Presenter { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderNode.kt index 975f83375b..a15d818a43 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderNode.kt @@ -14,17 +14,18 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails @ContributesNode(AppScope::class) -class ConfirmAccountProviderNode @AssistedInject constructor( +@Inject +class ConfirmAccountProviderNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: ConfirmAccountProviderPresenter.Factory, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenter.kt index 3bcc81ac83..fb15191abe 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderPresenter.kt @@ -11,14 +11,15 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource import io.element.android.features.login.impl.login.LoginHelper import io.element.android.libraries.architecture.Presenter -class ConfirmAccountProviderPresenter @AssistedInject constructor( +@Inject +class ConfirmAccountProviderPresenter( @Assisted private val params: Params, private val accountProviderDataSource: AccountProviderDataSource, private val loginHelper: LoginHelper, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt index 128a4c03e8..43ad8a5f54 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt @@ -14,17 +14,18 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.androidutils.browser.openUrlInChromeCustomTab import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class CreateAccountNode @AssistedInject constructor( +@Inject +class CreateAccountNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: CreateAccountPresenter.Factory, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountPresenter.kt index 0d83ea6b11..b713020acf 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountPresenter.kt @@ -13,9 +13,9 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.data.tryOrNull @@ -31,7 +31,8 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withTimeout import kotlin.time.Duration.Companion.seconds -class CreateAccountPresenter @AssistedInject constructor( +@Inject +class CreateAccountPresenter( @Assisted private val url: String, private val authenticationService: MatrixAuthenticationService, private val clientProvider: MatrixClientProvider, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/MessageParser.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/MessageParser.kt index c937cf9d48..7a1928322a 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/MessageParser.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/MessageParser.kt @@ -7,12 +7,12 @@ package io.element.android.features.login.impl.screens.createaccount -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.external.ExternalSession import kotlinx.serialization.json.Json -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface MessageParser { /** @@ -23,7 +23,8 @@ interface MessageParser { } @ContributesBinding(AppScope::class) -class DefaultMessageParser @Inject constructor( +@Inject +class DefaultMessageParser( private val accountProviderDataSource: AccountProviderDataSource, ) : MessageParser { override fun parse(message: String): ExternalSession { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordNode.kt index 69b63afce0..f06196bd51 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordNode.kt @@ -12,13 +12,14 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class LoginPasswordNode @AssistedInject constructor( +@Inject +class LoginPasswordNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: LoginPasswordPresenter, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt index 3d9dbd1d73..05f45a67cf 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt @@ -22,9 +22,10 @@ import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.core.SessionId import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class LoginPasswordPresenter @Inject constructor( +@Inject +class LoginPasswordPresenter( private val authenticationService: MatrixAuthenticationService, private val accountProviderDataSource: AccountProviderDataSource, ) : Presenter { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingNode.kt index d9c1615fde..f57122e66e 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingNode.kt @@ -14,17 +14,18 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails @ContributesNode(AppScope::class) -class OnBoardingNode @AssistedInject constructor( +@Inject +class OnBoardingNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: OnBoardingPresenter.Factory, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenter.kt index ba46e79b36..cec124d587 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingPresenter.kt @@ -16,9 +16,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.appconfig.OnBoardingConfig import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.enterprise.api.canConnectToAnyHomeserver @@ -29,7 +29,8 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.ui.utils.MultipleTapToUnlock -class OnBoardingPresenter @AssistedInject constructor( +@Inject +class OnBoardingPresenter( @Assisted private val params: OnBoardingNode.Params, private val buildMeta: BuildMeta, private val enterpriseService: EnterpriseService, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/confirmation/QrCodeConfirmationNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/confirmation/QrCodeConfirmationNode.kt index ce68eec76d..2d2e4c351b 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/confirmation/QrCodeConfirmationNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/confirmation/QrCodeConfirmationNode.kt @@ -13,14 +13,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.di.QrCodeLoginScope import io.element.android.libraries.architecture.inputs @ContributesNode(QrCodeLoginScope::class) -class QrCodeConfirmationNode @AssistedInject constructor( +@Inject +class QrCodeConfirmationNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : Node(buildContext = buildContext, plugins = plugins) { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/error/QrCodeErrorNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/error/QrCodeErrorNode.kt index a1d05e44e6..03df9c21ba 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/error/QrCodeErrorNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/error/QrCodeErrorNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.di.QrCodeLoginScope import io.element.android.features.login.impl.qrcode.QrCodeErrorScreenType @@ -22,7 +22,8 @@ import io.element.android.libraries.architecture.inputs import io.element.android.libraries.core.meta.BuildMeta @ContributesNode(QrCodeLoginScope::class) -class QrCodeErrorNode @AssistedInject constructor( +@Inject +class QrCodeErrorNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val buildMeta: BuildMeta, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroNode.kt index 0c96f614cd..8dd9c826c0 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroNode.kt @@ -13,13 +13,14 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.di.QrCodeLoginScope @ContributesNode(QrCodeLoginScope::class) -class QrCodeIntroNode @AssistedInject constructor( +@Inject +class QrCodeIntroNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: QrCodeIntroPresenter, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroPresenter.kt index 8a64e6921c..85e6a41ee7 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroPresenter.kt @@ -18,9 +18,10 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.permissions.api.PermissionsEvents import io.element.android.libraries.permissions.api.PermissionsPresenter -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class QrCodeIntroPresenter @Inject constructor( +@Inject +class QrCodeIntroPresenter( private val buildMeta: BuildMeta, permissionsPresenterFactory: PermissionsPresenter.Factory, ) : Presenter { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanNode.kt index d5e10d2a82..e9eceb8b4a 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanNode.kt @@ -13,14 +13,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.di.QrCodeLoginScope import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData @ContributesNode(QrCodeLoginScope::class) -class QrCodeScanNode @AssistedInject constructor( +@Inject +class QrCodeScanNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: QrCodeScanPresenter, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt index 9be601f775..f6185851d3 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt @@ -31,9 +31,10 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import timber.log.Timber import java.util.concurrent.atomic.AtomicBoolean -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class QrCodeScanPresenter @Inject constructor( +@Inject +class QrCodeScanPresenter( private val qrCodeLoginDataFactory: MatrixQrCodeLoginDataFactory, private val qrCodeLoginManager: QrCodeLoginManager, private val coroutineDispatchers: CoroutineDispatchers, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderNode.kt index d6e411393c..999ad50099 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderNode.kt @@ -14,14 +14,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class SearchAccountProviderNode @AssistedInject constructor( +@Inject +class SearchAccountProviderNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: SearchAccountProviderPresenter, diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderPresenter.kt index 956d24dc8c..57eb0cef97 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderPresenter.kt @@ -23,9 +23,10 @@ import io.element.android.libraries.architecture.Presenter import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class SearchAccountProviderPresenter @Inject constructor( +@Inject +class SearchAccountProviderPresenter( private val homeserverResolver: HomeserverResolver, private val changeServerPresenter: Presenter, ) : Presenter { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/web/WebClientUrlForAuthenticationRetriever.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/web/WebClientUrlForAuthenticationRetriever.kt index 8046576347..df014e96ab 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/web/WebClientUrlForAuthenticationRetriever.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/web/WebClientUrlForAuthenticationRetriever.kt @@ -8,20 +8,21 @@ package io.element.android.features.login.impl.web import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.AuthenticationConfig import io.element.android.features.login.impl.screens.createaccount.AccountCreationNotSupported -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.wellknown.api.WellknownRetriever import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface WebClientUrlForAuthenticationRetriever { suspend fun retrieve(homeServerUrl: String): String } @ContributesBinding(AppScope::class) -class DefaultWebClientUrlForAuthenticationRetriever @Inject constructor( +@Inject +class DefaultWebClientUrlForAuthenticationRetriever( private val wellknownRetriever: WellknownRetriever, ) : WebClientUrlForAuthenticationRetriever { override suspend fun retrieve(homeServerUrl: String): String { diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt index 6cb8ee9ff6..e9ebee2f5b 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt @@ -22,8 +22,8 @@ internal class FakeMergedQrCodeLoginComponent(private val qrCodeLoginManager: Qr override fun qrCodeLoginManager(): QrCodeLoginManager = qrCodeLoginManager class Builder(private val qrCodeLoginManager: QrCodeLoginManager = FakeQrCodeLoginManager()) : - QrCodeLoginComponent.Builder { - override fun build(): QrCodeLoginComponent { + QrCodeLoginComponent.Factory { + override fun create(): QrCodeLoginComponent { return FakeMergedQrCodeLoginComponent(qrCodeLoginManager) } } diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt index 0c651eb077..2662d69847 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.logout.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.logout.api.LogoutEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultLogoutEntryPoint @Inject constructor() : LogoutEntryPoint { +@Inject +class DefaultLogoutEntryPoint() : LogoutEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): LogoutEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutUseCase.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutUseCase.kt index 59906b1d74..e27fdd6071 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutUseCase.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutUseCase.kt @@ -7,15 +7,16 @@ package io.element.android.features.logout.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.logout.api.LogoutUseCase -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultLogoutUseCase @Inject constructor( +@Inject +class DefaultLogoutUseCase( private val authenticationService: MatrixAuthenticationService, private val matrixClientProvider: MatrixClientProvider, ) : LogoutUseCase { diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutNode.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutNode.kt index 382ef75b62..89982f766c 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutNode.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutNode.kt @@ -13,14 +13,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.logout.api.LogoutEntryPoint import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class LogoutNode @AssistedInject constructor( +@Inject +class LogoutNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: LogoutPresenter, diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutPresenter.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutPresenter.kt index 3d1cacd89c..a31ff80bda 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutPresenter.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutPresenter.kt @@ -28,9 +28,10 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class LogoutPresenter @Inject constructor( +@Inject +class LogoutPresenter( private val matrixClient: MatrixClient, private val encryptionService: EncryptionService, ) : 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/LogoutModule.kt index 6c5f9a8644..fae2871e4f 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/LogoutModule.kt @@ -7,16 +7,16 @@ package io.element.android.features.logout.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo import io.element.android.features.logout.api.direct.DirectLogoutState import io.element.android.features.logout.impl.direct.DirectLogoutPresenter import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope @ContributesTo(SessionScope::class) -@Module +@BindingContainer interface LogoutModule { @Binds fun bindDirectLogoutPresenter(presenter: DirectLogoutPresenter): Presenter diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt index e1cf8aa656..8603040ff0 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt @@ -9,7 +9,7 @@ package io.element.android.features.logout.impl.direct import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.PreviewParameter -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.logout.api.direct.DirectLogoutEvents import io.element.android.features.logout.api.direct.DirectLogoutState import io.element.android.features.logout.api.direct.DirectLogoutStateProvider @@ -18,10 +18,11 @@ import io.element.android.features.logout.impl.ui.LogoutActionDialog import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.di.SessionScope -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultDirectLogoutView @Inject constructor() : DirectLogoutView { +@Inject +class DefaultDirectLogoutView() : DirectLogoutView { @Composable override fun Render(state: DirectLogoutState) { val eventSink = state.eventSink diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DirectLogoutPresenter.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DirectLogoutPresenter.kt index 4694b6dc2f..fc7929c161 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DirectLogoutPresenter.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DirectLogoutPresenter.kt @@ -25,9 +25,10 @@ import io.element.android.libraries.matrix.api.encryption.BackupUploadState import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class DirectLogoutPresenter @Inject constructor( +@Inject +class DirectLogoutPresenter( private val matrixClient: MatrixClient, private val encryptionService: EncryptionService, ) : Presenter { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt index c167b868e4..afcf0b6b6e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt @@ -10,15 +10,18 @@ package io.element.android.features.messages.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.messages.api.MessagesEntryPoint -import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.Inject +import io.element.android.libraries.architecture.NodeFactoriesBindings +import io.element.android.libraries.architecture.bindings +import io.element.android.libraries.di.SessionScope -@ContributesBinding(AppScope::class) -class DefaultMessagesEntryPoint @Inject constructor() : MessagesEntryPoint { +@ContributesBinding(SessionScope::class) +@Inject +class DefaultMessagesEntryPoint : MessagesEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): MessagesEntryPoint.NodeBuilder { + val nodeFactories = parentNode.bindings().nodeFactories() val plugins = ArrayList() return object : MessagesEntryPoint.NodeBuilder { @@ -33,7 +36,7 @@ class DefaultMessagesEntryPoint @Inject constructor() : MessagesEntryPoint { } override fun build(): Node { - return parentNode.createNode(buildContext, plugins) + return nodeFactories[MessagesFlowNode::class]!!.create(buildContext, plugins) } } } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt index 266d2459f0..29b62a8d43 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesFlowNode.kt @@ -20,8 +20,8 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Interaction import io.element.android.anvilannotations.ContributesNode import io.element.android.features.call.api.CallType @@ -92,7 +92,8 @@ import kotlinx.coroutines.withContext import kotlinx.parcelize.Parcelize @ContributesNode(RoomScope::class) -class MessagesFlowNode @AssistedInject constructor( +@Inject +class MessagesFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val matrixClient: MatrixClient, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index d286f8a4c7..ff7aecb50b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -24,8 +24,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ElementTheme import io.element.android.features.knockrequests.api.banner.KnockRequestsBannerRenderer @@ -50,7 +50,7 @@ import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.designsystem.utils.OnLifecycleEvent -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.analytics.toAnalyticsViewRoom @@ -74,7 +74,8 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch @ContributesNode(RoomScope::class) -class MessagesNode @AssistedInject constructor( +@Inject +class MessagesNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, @ApplicationContext private val context: Context, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt index 40a8de1276..1d576472a3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt @@ -22,9 +22,9 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.lifecycle.compose.LifecycleResumeEffect -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.PinUnpinAction import io.element.android.appconfig.MessageComposerConfig import io.element.android.features.messages.api.timeline.HtmlConverterProvider @@ -92,7 +92,8 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber -class MessagesPresenter @AssistedInject constructor( +@Inject +class MessagesPresenter( @Assisted private val navigator: MessagesNavigator, private val room: JoinedRoom, @Assisted private val composerPresenter: Presenter, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenter.kt index ca7a6fa4a3..bead09660b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenter.kt @@ -14,10 +14,10 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.UserEventPermissions import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction import io.element.android.features.messages.impl.actionlist.model.TimelineItemActionComparator @@ -61,7 +61,8 @@ interface ActionListPresenter : Presenter { } } -class DefaultActionListPresenter @AssistedInject constructor( +@Inject +class DefaultActionListPresenter( @Assisted private val postProcessor: TimelineItemActionPostProcessor, @Assisted diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewNode.kt index 735d5548e8..d94e69ac22 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewNode.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ForcedDarkElementTheme import io.element.android.features.messages.impl.attachments.Attachment @@ -24,7 +24,8 @@ import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.libraries.mediaviewer.api.local.LocalMediaRenderer @ContributesNode(RoomScope::class) -class AttachmentsPreviewNode @AssistedInject constructor( +@Inject +class AttachmentsPreviewNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: AttachmentsPreviewPresenter.Factory, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewPresenter.kt index d01b11a026..a0452c8acf 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/preview/AttachmentsPreviewPresenter.kt @@ -17,9 +17,9 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.attachments.Attachment import io.element.android.features.messages.impl.attachments.video.MediaOptimizationSelectorPresenter import io.element.android.libraries.androidutils.file.TemporaryUriDeleter @@ -49,7 +49,8 @@ import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import timber.log.Timber -class AttachmentsPreviewPresenter @AssistedInject constructor( +@Inject +class AttachmentsPreviewPresenter( @Assisted private val attachment: Attachment, @Assisted private val onDoneListener: OnDoneListener, @Assisted private val timelineMode: Timeline.Mode, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt index ea9c3dcc0c..8f1db5b7ef 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt @@ -14,10 +14,10 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeVideo import io.element.android.libraries.di.SessionScope @@ -34,7 +34,8 @@ import kotlinx.coroutines.flow.first import timber.log.Timber import kotlin.math.roundToLong -class DefaultMediaOptimizationSelectorPresenter @AssistedInject constructor( +@Inject +class DefaultMediaOptimizationSelectorPresenter( @Assisted private val localMedia: LocalMedia, private val maxUploadSizeProvider: MaxUploadSizeProvider, private val sessionPreferencesStore: SessionPreferencesStore, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/VideoMetadataExtractor.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/VideoMetadataExtractor.kt index 0567bfeffc..f4db599640 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/VideoMetadataExtractor.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/VideoMetadataExtractor.kt @@ -11,13 +11,13 @@ import android.content.Context import android.media.MediaMetadataRetriever import android.net.Uri import android.util.Size -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds @@ -30,7 +30,8 @@ interface VideoMetadataExtractor : AutoCloseable { } @ContributesBinding(AppScope::class) -class DefaultVideoMetadataExtractor @AssistedInject constructor( +@Inject +class DefaultVideoMetadataExtractor( @ApplicationContext private val context: Context, @Assisted private val uri: Uri, ) : VideoMetadataExtractor { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStatePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStatePresenter.kt index 1d3b9778c3..90d40b4647 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStatePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStatePresenter.kt @@ -20,9 +20,10 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class IdentityChangeStatePresenter @Inject constructor( +@Inject +class IdentityChangeStatePresenter( private val room: JoinedRoom, private val encryptionService: EncryptionService, ) : Presenter { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/VerifiedUserSendFailureFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/VerifiedUserSendFailureFactory.kt index 1052332403..2c2837213a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/VerifiedUserSendFailureFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/VerifiedUserSendFailureFactory.kt @@ -9,9 +9,10 @@ package io.element.android.features.messages.impl.crypto.sendfailure import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class VerifiedUserSendFailureFactory @Inject constructor( +@Inject +class VerifiedUserSendFailureFactory( private val room: BaseRoom, ) { suspend fun create( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt index 0373002f7e..35607644da 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt @@ -22,9 +22,10 @@ import io.element.android.libraries.architecture.runUpdatingState import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ResolveVerifiedUserSendFailurePresenter @Inject constructor( +@Inject +class ResolveVerifiedUserSendFailurePresenter( private val room: JoinedRoom, private val verifiedUserSendFailureFactory: VerifiedUserSendFailureFactory, ) : 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/MessagesBindsModule.kt index 5148ea0216..8dca347925 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/MessagesBindsModule.kt @@ -7,9 +7,9 @@ package io.element.android.features.messages.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo import io.element.android.features.messages.impl.crypto.identity.IdentityChangeState import io.element.android.features.messages.impl.crypto.identity.IdentityChangeStatePresenter import io.element.android.features.messages.impl.crypto.sendfailure.resolve.ResolveVerifiedUserSendFailurePresenter @@ -32,7 +32,7 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.RoomScope @ContributesTo(RoomScope::class) -@Module +@BindingContainer interface MessagesBindsModule { @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/MessagesProvidesModule.kt index 970aa63b75..d353ae2c09 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/MessagesProvidesModule.kt @@ -7,16 +7,16 @@ package io.element.android.features.messages.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.features.messages.impl.timeline.di.LiveTimeline import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.timeline.Timeline @ContributesTo(RoomScope::class) -@Module +@BindingContainer object MessagesProvidesModule { @Provides @LiveTimeline diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt index 57909c5a8a..77a7d1616b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt @@ -7,15 +7,16 @@ package io.element.android.features.messages.impl.draft -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.room.draft.ComposerDraft -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) -class DefaultComposerDraftService @Inject constructor( +@Inject +class DefaultComposerDraftService( private val volatileComposerDraftStore: VolatileComposerDraftStore, private val matrixComposerDraftStore: MatrixComposerDraftStore, ) : ComposerDraftService { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/MatrixComposerDraftStore.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/MatrixComposerDraftStore.kt index 88000546dd..13e953a58c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/MatrixComposerDraftStore.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/MatrixComposerDraftStore.kt @@ -12,13 +12,14 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.room.draft.ComposerDraft import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * A draft store that persists drafts in the room state. * It can be used to store drafts that should be persisted across app restarts. */ -class MatrixComposerDraftStore @Inject constructor( +@Inject +class MatrixComposerDraftStore( private val client: MatrixClient, ) : ComposerDraftStore { override suspend fun loadDraft(roomId: RoomId, threadRoot: ThreadId?): ComposerDraft? { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt index b7b714f5c9..575e38110f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt @@ -10,14 +10,15 @@ package io.element.android.features.messages.impl.draft import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.room.draft.ComposerDraft -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * A volatile draft store that keeps drafts in memory only. * It can be used to store drafts that should not be persisted across app restarts. * Currently it's used to store draft message when moving to edit mode. */ -class VolatileComposerDraftStore @Inject constructor() : ComposerDraftStore { +@Inject +class VolatileComposerDraftStore() : ComposerDraftStore { private val drafts: MutableMap = mutableMapOf() override suspend fun loadDraft(roomId: RoomId, threadRoot: ThreadId?): ComposerDraft? { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesNode.kt index 3f6e6c3efb..f862c9dc8f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesNode.kt @@ -17,8 +17,8 @@ import com.bumble.appyx.core.navigation.model.permanent.PermanentNavModel import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -31,7 +31,8 @@ import io.element.android.libraries.roomselect.api.RoomSelectMode import kotlinx.parcelize.Parcelize @ContributesNode(RoomScope::class) -class ForwardMessagesNode @AssistedInject constructor( +@Inject +class ForwardMessagesNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: ForwardMessagesPresenter.Factory, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt index 013003e4b7..a52a5ca2cd 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/forward/ForwardMessagesPresenter.kt @@ -10,9 +10,9 @@ package io.element.android.features.messages.impl.forward import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runCatchingUpdatingState @@ -26,7 +26,8 @@ import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class ForwardMessagesPresenter @AssistedInject constructor( +@Inject +class ForwardMessagesPresenter( @Assisted eventId: String, @Assisted private val timelineProvider: TimelineProvider, @SessionCoroutineScope diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt index 6bf24642bc..7496518a7b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt @@ -7,20 +7,21 @@ package io.element.android.features.messages.impl.link -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.core.extensions.containsRtLOverride -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.wysiwyg.link.Link import java.net.URI -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface LinkChecker { fun isSafe(link: Link): Boolean } @ContributesBinding(AppScope::class) -class DefaultLinkChecker @Inject constructor() : LinkChecker { +@Inject +class DefaultLinkChecker() : LinkChecker { override fun isSafe(link: Link): Boolean { return if (link.url.containsRtLOverride()) { false diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkPresenter.kt index 3259bdf8f8..c4e97938ab 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkPresenter.kt @@ -14,9 +14,10 @@ import androidx.compose.runtime.remember import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.wysiwyg.link.Link -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class LinkPresenter @Inject constructor( +@Inject +class LinkPresenter( private val linkChecker: LinkChecker, ) : Presenter { @Composable diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt index 758f7013a2..8c73875ac9 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt @@ -10,16 +10,17 @@ package io.element.android.features.messages.impl.messagecomposer import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.messages.api.MessageComposerContext import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.textcomposer.model.MessageComposerMode -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) @ContributesBinding(RoomScope::class) -class DefaultMessageComposerContext @Inject constructor() : MessageComposerContext { +@Inject +class DefaultMessageComposerContext() : MessageComposerContext { override var composerMode: MessageComposerMode by mutableStateOf(MessageComposerMode.Normal) internal set } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt index 2da723746c..68153e01fc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/MessageComposerPresenter.kt @@ -25,9 +25,9 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.media3.common.util.UnstableApi -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Composer import im.vector.app.features.analytics.plan.Interaction import io.element.android.features.location.api.LocationService @@ -99,7 +99,8 @@ import timber.log.Timber import kotlin.time.Duration.Companion.seconds import io.element.android.libraries.core.mimetype.MimeTypes.Any as AnyMimeTypes -class MessageComposerPresenter @AssistedInject constructor( +@Inject +class MessageComposerPresenter( @Assisted private val navigator: MessagesNavigator, @Assisted private val timelineController: TimelineController, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt index cc81549458..886a3108a3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt @@ -8,11 +8,11 @@ package io.element.android.features.messages.impl.messagecomposer import androidx.compose.runtime.Composable -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.wysiwyg.compose.RichTextEditorState import io.element.android.wysiwyg.compose.rememberRichTextEditorState -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface RichTextEditorStateFactory { @Composable @@ -20,7 +20,8 @@ interface RichTextEditorStateFactory { } @ContributesBinding(AppScope::class) -class DefaultRichTextEditorStateFactory @Inject constructor() : RichTextEditorStateFactory { +@Inject +class DefaultRichTextEditorStateFactory() : RichTextEditorStateFactory { @Composable override fun remember(): RichTextEditorState { return rememberRichTextEditorState() diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/RoomAliasSuggestionsDataSource.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/RoomAliasSuggestionsDataSource.kt index 729bc839fd..a018a5331e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/RoomAliasSuggestionsDataSource.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/RoomAliasSuggestionsDataSource.kt @@ -7,14 +7,14 @@ package io.element.android.features.messages.impl.messagecomposer.suggestions -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.roomlist.RoomListService import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import javax.inject.Inject +import dev.zacsweers.metro.Inject data class RoomAliasSuggestion( val roomAlias: RoomAlias, @@ -28,7 +28,8 @@ interface RoomAliasSuggestionsDataSource { } @ContributesBinding(SessionScope::class) -class DefaultRoomAliasSuggestionsDataSource @Inject constructor( +@Inject +class DefaultRoomAliasSuggestionsDataSource( private val roomListService: RoomListService, ) : RoomAliasSuggestionsDataSource { override fun getAllRoomAliasSuggestions(): Flow> { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt index 5055d09a3b..c5a5a54e50 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt @@ -16,12 +16,13 @@ import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.textcomposer.mentions.ResolvedSuggestion import io.element.android.libraries.textcomposer.model.Suggestion import io.element.android.libraries.textcomposer.model.SuggestionType -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * This class is responsible for processing suggestions when `@`, `/` or `#` are type in the composer. */ -class SuggestionsProcessor @Inject constructor() { +@Inject +class SuggestionsProcessor() { /** * Process the suggestion. * @param suggestion The current suggestion input diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt index 9f18ec86ae..641673c2da 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt @@ -11,7 +11,7 @@ import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.mapState import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.room.CreateTimelineParams import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.sync.SyncService @@ -26,10 +26,11 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) -class PinnedEventsTimelineProvider @Inject constructor( +@Inject +class PinnedEventsTimelineProvider( private val room: JoinedRoom, private val syncService: SyncService, private val dispatchers: CoroutineDispatchers, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerItemFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerItemFactory.kt index 55550bde7a..7137e91c89 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerItemFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerItemFactory.kt @@ -12,9 +12,10 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.eventformatter.api.PinnedMessagesBannerFormatter import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PinnedMessagesBannerItemFactory @Inject constructor( +@Inject +class PinnedMessagesBannerItemFactory( private val coroutineDispatchers: CoroutineDispatchers, private val formatter: PinnedMessagesBannerFormatter, ) { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt index 21a137b363..11fc1fa62e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt @@ -29,9 +29,10 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PinnedMessagesBannerPresenter @Inject constructor( +@Inject +class PinnedMessagesBannerPresenter( private val room: BaseRoom, private val itemFactory: PinnedMessagesBannerItemFactory, private val pinnedEventsTimelineProvider: PinnedEventsTimelineProvider, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListNode.kt index 45bed2cc20..0c16da008d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListNode.kt @@ -18,8 +18,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.messages.impl.actionlist.ActionListPresenter import io.element.android.features.messages.impl.timeline.di.LocalTimelineItemPresenterFactories @@ -38,7 +38,8 @@ import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.ui.strings.CommonStrings @ContributesNode(RoomScope::class) -class PinnedMessagesListNode @AssistedInject constructor( +@Inject +class PinnedMessagesListNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: PinnedMessagesListPresenter.Factory, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenter.kt index 523c371747..72389c891b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/list/PinnedMessagesListPresenter.kt @@ -17,9 +17,9 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Interaction import im.vector.app.features.analytics.plan.PinUnpinAction import io.element.android.features.messages.impl.UserEventPermissions @@ -61,7 +61,8 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import timber.log.Timber -class PinnedMessagesListPresenter @AssistedInject constructor( +@Inject +class PinnedMessagesListPresenter( @Assisted private val navigator: PinnedMessagesListNavigator, private val room: JoinedRoom, timelineItemsFactoryCreator: TimelineItemsFactory.Creator, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageNode.kt index 027f36df84..eacec9dcf1 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessageNode.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -22,7 +22,8 @@ import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId @ContributesNode(RoomScope::class) -class ReportMessageNode @AssistedInject constructor( +@Inject +class ReportMessageNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: ReportMessagePresenter.Factory, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessagePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessagePresenter.kt index 538d9ce25a..6bde64f3ad 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessagePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/report/ReportMessagePresenter.kt @@ -15,9 +15,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runUpdatingState @@ -30,7 +30,8 @@ import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class ReportMessagePresenter @AssistedInject constructor( +@Inject +class ReportMessagePresenter( private val room: JoinedRoom, @Assisted private val inputs: Inputs, private val snackbarDispatcher: SnackbarDispatcher, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/ThreadedMessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/ThreadedMessagesNode.kt index cde141dcd6..35499362fa 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/ThreadedMessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/ThreadedMessagesNode.kt @@ -24,8 +24,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ElementTheme import io.element.android.features.messages.impl.MessagesNavigator @@ -49,7 +49,7 @@ import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.designsystem.utils.OnLifecycleEvent -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.analytics.toAnalyticsViewRoom @@ -73,7 +73,8 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @ContributesNode(RoomScope::class) -class ThreadedMessagesNode @AssistedInject constructor( +@Inject +class ThreadedMessagesNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, @ApplicationContext private val context: Context, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/DefaultHtmlConverterProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/DefaultHtmlConverterProvider.kt index 78e763fcc2..e4d317255d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/DefaultHtmlConverterProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/DefaultHtmlConverterProvider.kt @@ -13,11 +13,11 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.messages.api.timeline.HtmlConverterProvider import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.textcomposer.ElementRichTextEditorStyle import io.element.android.libraries.textcomposer.mentions.MentionSpanProvider import io.element.android.wysiwyg.compose.StyledHtmlConverter @@ -25,11 +25,12 @@ import io.element.android.wysiwyg.display.MentionDisplayHandler import io.element.android.wysiwyg.display.TextDisplay import io.element.android.wysiwyg.utils.HtmlConverter import uniffi.wysiwyg_composer.newMentionDetector -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) @SingleIn(RoomScope::class) -class DefaultHtmlConverterProvider @Inject constructor( +@Inject +class DefaultHtmlConverterProvider( private val mentionSpanProvider: MentionSpanProvider, ) : HtmlConverterProvider { private val htmlConverter: MutableState = mutableStateOf(null) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/MarkAsFullyRead.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/MarkAsFullyRead.kt index b2962e2f5a..5e4684208e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/MarkAsFullyRead.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/MarkAsFullyRead.kt @@ -7,21 +7,22 @@ package io.element.android.features.messages.impl.timeline -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.timeline.ReceiptType import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface MarkAsFullyRead { operator fun invoke(roomId: RoomId) } @ContributesBinding(SessionScope::class) -class DefaultMarkAsFullyRead @Inject constructor( +@Inject +class DefaultMarkAsFullyRead( private val matrixClient: MatrixClient, ) : MarkAsFullyRead { override fun invoke(roomId: RoomId) { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index 6289feecfd..bc46f6e9df 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -7,10 +7,10 @@ package io.element.android.features.messages.impl.timeline -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.messages.impl.timeline.di.LiveTimeline import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.CreateTimelineParams import io.element.android.libraries.matrix.api.room.JoinedRoom @@ -34,15 +34,17 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import java.io.Closeable import java.util.Optional -import javax.inject.Inject +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding /** * This controller is responsible of using the right timeline to display messages and make associated actions. * It can be focused on the live timeline or on a detached timeline (focusing an unknown event). */ @SingleIn(RoomScope::class) -@ContributesBinding(RoomScope::class, boundType = TimelineProvider::class) -class TimelineController @Inject constructor( +@ContributesBinding(RoomScope::class, binding = binding()) +@Inject +class TimelineController( private val room: JoinedRoom, @LiveTimeline private val liveTimeline: Timeline, ) : Closeable, TimelineProvider { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt index 884f0964bb..fd30d200ac 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt @@ -13,9 +13,10 @@ import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemIndexer @Inject constructor() { +@Inject +class TimelineItemIndexer() { // This is a latch to wait for the first process call private val firstProcessLatch = CompletableDeferred() private val timelineEventsIndexes = mutableMapOf() diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt index ef740e3a8b..e3954e62a2 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelinePresenter.kt @@ -20,9 +20,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.MessagesNavigator import io.element.android.features.messages.impl.crypto.sendfailure.resolve.ResolveVerifiedUserSendFailureEvents import io.element.android.features.messages.impl.crypto.sendfailure.resolve.ResolveVerifiedUserSendFailureState @@ -67,7 +67,8 @@ import timber.log.Timber const val FOCUS_ON_PINNED_EVENT_DEBOUNCE_DURATION_IN_MILLIS = 200L -class TimelinePresenter @AssistedInject constructor( +@Inject +class TimelinePresenter( timelineItemsFactoryCreator: TimelineItemsFactory.Creator, private val room: JoinedRoom, private val dispatchers: CoroutineDispatchers, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenter.kt index 028305d86e..dd24df232c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenter.kt @@ -16,9 +16,10 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.architecture.Presenter import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class CustomReactionPresenter @Inject constructor( +@Inject +class CustomReactionPresenter( private val emojibaseProvider: EmojibaseProvider ) : Presenter { @Composable diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenter.kt index a5c7eb89be..071f56ddca 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenter.kt @@ -21,9 +21,10 @@ import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ReactionSummaryPresenter @Inject constructor( +@Inject +class ReactionSummaryPresenter( private val room: BaseRoom, ) : Presenter { @Composable diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt index 80092faa2b..4ad8f29076 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt @@ -14,9 +14,10 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.architecture.Presenter -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ReadReceiptBottomSheetPresenter @Inject constructor() : Presenter { +@Inject +class ReadReceiptBottomSheetPresenter() : Presenter { @Composable override fun present(): ReadReceiptBottomSheetState { var selectedEvent: TimelineItem.Event? by remember { mutableStateOf(null) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoNode.kt index 2a4f193fe9..b0d6a44344 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/debug/EventDebugInfoNode.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -22,7 +22,8 @@ import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.timeline.item.TimelineItemDebugInfo @ContributesNode(RoomScope::class) -class EventDebugInfoNode @AssistedInject constructor( +@Inject +class EventDebugInfoNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : Node(buildContext, plugins = plugins) { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/FakeTimelineItemPresenterFactories.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/FakeTimelineItemPresenterFactories.kt index 6ef9d61a7b..85812b64a3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/FakeTimelineItemPresenterFactories.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/FakeTimelineItemPresenterFactories.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.voiceplayer.api.aVoiceMessageState fun aFakeTimelineItemPresenterFactories() = TimelineItemPresenterFactories( mapOf( Pair( - TimelineItemVoiceContent::class.java, + TimelineItemVoiceContent::class, TimelineItemPresenterFactory { Presenter { aVoiceMessageState() } }, ), ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/LiveTimeline.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/LiveTimeline.kt index 40624c9911..6fe88272af 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/LiveTimeline.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/LiveTimeline.kt @@ -7,7 +7,7 @@ package io.element.android.features.messages.impl.timeline.di -import javax.inject.Qualifier +import dev.zacsweers.metro.Qualifier @Retention(AnnotationRetention.RUNTIME) @MustBeDocumented diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemEventContentKey.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemEventContentKey.kt index bac308007b..74c184dde4 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemEventContentKey.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/di/TimelineItemEventContentKey.kt @@ -7,7 +7,7 @@ package io.element.android.features.messages.impl.timeline.di -import dagger.MapKey +import dev.zacsweers.metro.MapKey import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import kotlin.reflect.KClass 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 96bf4de975..f4b98cce8e 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 @@ -9,25 +9,26 @@ package io.element.android.features.messages.impl.timeline.di import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.multibindings.Multibinds +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Multibinds 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 io.element.android.libraries.di.SingleIn -import javax.inject.Inject +import dev.zacsweers.metro.SingleIn +import kotlin.reflect.KClass /** * Dagger module that declares the [TimelineItemPresenterFactory] map multi binding. * * Its sole purpose is to support the case of an empty map multibinding. */ -@Module +@BindingContainer @ContributesTo(RoomScope::class) interface TimelineItemPresenterFactoriesModule { @Multibinds - fun multiBindTimelineItemPresenterFactories(): @JvmSuppressWildcards Map, TimelineItemPresenterFactory<*, *>> + fun multiBindTimelineItemPresenterFactories(): @JvmSuppressWildcards Map, TimelineItemPresenterFactory<*, *>> } /** @@ -38,8 +39,9 @@ interface TimelineItemPresenterFactoriesModule { * goes out of the [LazyColumn] viewport. */ @SingleIn(RoomScope::class) -class TimelineItemPresenterFactories @Inject constructor( - private val factories: @JvmSuppressWildcards Map, TimelineItemPresenterFactory<*, *>>, +@Inject +class TimelineItemPresenterFactories( + private val factories: @JvmSuppressWildcards Map, TimelineItemPresenterFactory<*, *>>, ) { private val presenters: MutableMap> = mutableMapOf() @@ -57,7 +59,7 @@ class TimelineItemPresenterFactories @Inject constructor( @Composable fun rememberPresenter( content: C, - contentClass: Class, + contentClass: KClass, ): Presenter = remember(content) { presenters[content]?.let { @Suppress("UNCHECKED_CAST") @@ -86,5 +88,5 @@ inline fun TimelineItemPresenter content: C ): Presenter = rememberPresenter( content = content, - contentClass = C::class.java + contentClass = C::class ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt index b998c0c815..a040b49e69 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/TimelineItemsFactory.kt @@ -7,9 +7,9 @@ package io.element.android.features.messages.impl.timeline.factories -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.diff.TimelineItemsCacheInvalidator import io.element.android.features.messages.impl.timeline.factories.event.TimelineItemEventFactory import io.element.android.features.messages.impl.timeline.factories.virtual.TimelineItemVirtualFactory @@ -29,7 +29,8 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext -class TimelineItemsFactory @AssistedInject constructor( +@Inject +class TimelineItemsFactory( @Assisted config: TimelineItemsFactoryConfig, eventItemFactoryCreator: TimelineItemEventFactory.Creator, private val dispatchers: CoroutineDispatchers, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt index 2ffec3c1f4..51b29ea86e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt @@ -26,9 +26,10 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StickerConten import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentFactory @Inject constructor( +@Inject +class TimelineItemContentFactory( private val messageFactory: TimelineItemContentMessageFactory, private val redactedMessageFactory: TimelineItemContentRedactedFactory, private val stickerFactory: TimelineItemContentStickerFactory, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt index d9608129d4..b8679e278b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt @@ -10,9 +10,10 @@ package io.element.android.features.messages.impl.timeline.factories.event import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentFailedToParseMessageFactory @Inject constructor() { +@Inject +class TimelineItemContentFailedToParseMessageFactory() { fun create(@Suppress("UNUSED_PARAMETER") failedToParseMessageLike: FailedToParseMessageLikeContent): TimelineItemEventContent { return TimelineItemUnknownContent } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt index 6b805f59b4..802e81898c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt @@ -10,9 +10,10 @@ package io.element.android.features.messages.impl.timeline.factories.event import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentFailedToParseStateFactory @Inject constructor() { +@Inject +class TimelineItemContentFailedToParseStateFactory() { @Suppress("UNUSED_PARAMETER") fun create(failedToParseState: FailedToParseStateContent): TimelineItemEventContent { return TimelineItemUnknownContent diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt index f9e705b1ca..f2eec9e15f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt @@ -48,10 +48,11 @@ import io.element.android.libraries.matrix.ui.messages.toHtmlDocument import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration -class TimelineItemContentMessageFactory @Inject constructor( +@Inject +class TimelineItemContentMessageFactory( private val fileSizeFormatter: FileSizeFormatter, private val fileExtensionExtractor: FileExtensionExtractor, private val htmlConverterProvider: HtmlConverterProvider, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt index c0da622d15..5419ee049e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt @@ -12,9 +12,10 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.poll.api.pollcontent.PollContentStateFactory import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.PollContent -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentPollFactory @Inject constructor( +@Inject +class TimelineItemContentPollFactory( private val pollContentStateFactory: PollContentStateFactory, ) { suspend fun create( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentProfileChangeFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentProfileChangeFactory.kt index e4d0809b85..61472e7195 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentProfileChangeFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentProfileChangeFactory.kt @@ -12,9 +12,10 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.eventformatter.api.TimelineEventFormatter import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentProfileChangeFactory @Inject constructor( +@Inject +class TimelineItemContentProfileChangeFactory( private val timelineEventFormatter: TimelineEventFormatter, ) { fun create(eventTimelineItem: EventTimelineItem): TimelineItemEventContent { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt index 94b7ae3344..757c2d8146 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt @@ -10,9 +10,10 @@ package io.element.android.features.messages.impl.timeline.factories.event import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRedactedContent import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentRedactedFactory @Inject constructor() { +@Inject +class TimelineItemContentRedactedFactory() { fun create(@Suppress("UNUSED_PARAMETER") content: RedactedContent): TimelineItemEventContent { return TimelineItemRedactedContent } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRoomMembershipFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRoomMembershipFactory.kt index b1df3a2e10..fb912bbddb 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRoomMembershipFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRoomMembershipFactory.kt @@ -12,9 +12,10 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.eventformatter.api.TimelineEventFormatter import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentRoomMembershipFactory @Inject constructor( +@Inject +class TimelineItemContentRoomMembershipFactory( private val timelineEventFormatter: TimelineEventFormatter, ) { fun create(eventTimelineItem: EventTimelineItem): TimelineItemEventContent { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStateFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStateFactory.kt index 1b8ae0a560..d598555e6b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStateFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStateFactory.kt @@ -12,9 +12,10 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.eventformatter.api.TimelineEventFormatter import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentStateFactory @Inject constructor( +@Inject +class TimelineItemContentStateFactory( private val timelineEventFormatter: TimelineEventFormatter, ) { fun create(eventTimelineItem: EventTimelineItem): TimelineItemEventContent { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt index 94e75c48ef..43ee4dfcf2 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt @@ -13,9 +13,10 @@ import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.matrix.api.timeline.item.event.StickerContent import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentStickerFactory @Inject constructor( +@Inject +class TimelineItemContentStickerFactory( private val fileSizeFormatter: FileSizeFormatter, private val fileExtensionExtractor: FileExtensionExtractor ) { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt index 120dbe73da..61c4f20256 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt @@ -10,9 +10,10 @@ package io.element.android.features.messages.impl.timeline.factories.event import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemContentUTDFactory @Inject constructor() { +@Inject +class TimelineItemContentUTDFactory() { fun create(content: UnableToDecryptContent): TimelineItemEventContent { return TimelineItemEncryptedContent(content.data) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt index eda3f2a3f6..814f966f8b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt @@ -7,9 +7,9 @@ package io.element.android.features.messages.impl.timeline.factories.event -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.factories.TimelineItemsFactoryConfig import io.element.android.features.messages.impl.timeline.groups.canBeDisplayedInBubbleBlock import io.element.android.features.messages.impl.timeline.model.AggregatedReaction @@ -36,7 +36,8 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import java.util.Date -class TimelineItemEventFactory @AssistedInject constructor( +@Inject +class TimelineItemEventFactory( @Assisted private val config: TimelineItemsFactoryConfig, private val contentFactory: TimelineItemContentFactory, private val matrixClient: MatrixClient, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemDaySeparatorFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemDaySeparatorFactory.kt index 066f495ab9..42e8226242 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemDaySeparatorFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemDaySeparatorFactory.kt @@ -12,9 +12,10 @@ import io.element.android.features.messages.impl.timeline.model.virtual.Timeline import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.api.DateFormatterMode import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemDaySeparatorFactory @Inject constructor( +@Inject +class TimelineItemDaySeparatorFactory( private val dateFormatter: DateFormatter, ) { fun create(virtualItem: VirtualTimelineItem.DayDivider): TimelineItemVirtualModel { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt index 79af92bf93..ae575ab3de 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt @@ -16,9 +16,10 @@ import io.element.android.features.messages.impl.timeline.model.virtual.Timeline import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemVirtualModel import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineItemVirtualFactory @Inject constructor( +@Inject +class TimelineItemVirtualFactory( private val daySeparatorFactory: TimelineItemDaySeparatorFactory, ) { fun create( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt index 46ed097cd7..0dd61a5b03 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt @@ -10,13 +10,14 @@ package io.element.android.features.messages.impl.timeline.groups import androidx.annotation.VisibleForTesting import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.UniqueId import kotlinx.collections.immutable.toImmutableList -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) -class TimelineItemGrouper @Inject constructor() { +@Inject +class TimelineItemGrouper() { /** * Keys are identifier of items in a group, only one by group will be kept. * Values are the actual groupIds. diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/protection/TimelineProtectionPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/protection/TimelineProtectionPresenter.kt index b4c2576a65..333a8c894b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/protection/TimelineProtectionPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/protection/TimelineProtectionPresenter.kt @@ -20,9 +20,10 @@ import io.element.android.libraries.matrix.api.media.MediaPreviewService import io.element.android.libraries.matrix.api.media.isPreviewEnabled import io.element.android.libraries.matrix.api.room.BaseRoom import kotlinx.collections.immutable.toImmutableSet -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineProtectionPresenter @Inject constructor( +@Inject +class TimelineProtectionPresenter( private val mediaPreviewService: MediaPreviewService, private val room: BaseRoom, ) : Presenter { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenter.kt index 7d293055a2..86c4488272 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenter.kt @@ -29,9 +29,10 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TypingNotificationPresenter @Inject constructor( +@Inject +class TypingNotificationPresenter( private val room: JoinedRoom, private val sessionPreferencesStore: SessionPreferencesStore, ) : Presenter { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/TextPillificationHelper.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/TextPillificationHelper.kt index 458c27061c..ec05846a01 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/TextPillificationHelper.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/TextPillificationHelper.kt @@ -13,7 +13,7 @@ import android.text.Spanned import android.text.style.URLSpan import android.util.Patterns import androidx.core.text.getSpans -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.MatrixPatternType import io.element.android.libraries.matrix.api.core.MatrixPatterns @@ -26,14 +26,15 @@ import io.element.android.libraries.textcomposer.mentions.MentionSpanProvider import io.element.android.libraries.textcomposer.mentions.getMentionSpans import io.element.android.wysiwyg.view.spans.CodeBlockSpan import io.element.android.wysiwyg.view.spans.InlineCodeSpan -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface TextPillificationHelper { fun pillify(text: CharSequence, pillifyPermalinks: Boolean = true): CharSequence } @ContributesBinding(RoomScope::class) -class DefaultTextPillificationHelper @Inject constructor( +@Inject +class DefaultTextPillificationHelper( private val mentionSpanProvider: MentionSpanProvider, private val permalinkParser: PermalinkParser, private val permalinkBuilder: PermalinkBuilder, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt index 8a05770942..6bc0e94172 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt @@ -8,7 +8,7 @@ package io.element.android.features.messages.impl.utils.messagesummary import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.TimelineItemAudioContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemCallNotifyContent @@ -27,13 +27,14 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent import io.element.android.libraries.core.extensions.toSafeLength -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.RoomScope import io.element.android.libraries.ui.strings.CommonStrings -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) -class DefaultMessageSummaryFormatter @Inject constructor( +@Inject +class DefaultMessageSummaryFormatter( @ApplicationContext private val context: Context, ) : MessageSummaryFormatter { override fun format(event: TimelineItem.Event): String { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt index b8ecab747a..bb15b807e3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt @@ -19,10 +19,10 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.core.net.toUri import androidx.lifecycle.Lifecycle -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Composer import io.element.android.features.messages.api.MessageComposerContext import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerEvents @@ -51,7 +51,8 @@ import java.io.File import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds -class DefaultVoiceMessageComposerPresenter @AssistedInject constructor( +@Inject +class DefaultVoiceMessageComposerPresenter( @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, @Assisted private val timelineMode: Timeline.Mode, private val voiceRecorder: VoiceRecorder, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPlayer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPlayer.kt index 57b18817f5..9775109a6d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPlayer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPlayer.kt @@ -21,7 +21,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.scan import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * A media player for the voice message composer. @@ -29,7 +29,8 @@ import javax.inject.Inject * @param mediaPlayer The [MediaPlayer] to use. * @param sessionCoroutineScope */ -class VoiceMessageComposerPlayer @Inject constructor( +@Inject +class VoiceMessageComposerPlayer( private val mediaPlayer: MediaPlayer, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManager.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManager.kt index 087ed26d06..9da2255532 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManager.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManager.kt @@ -7,21 +7,22 @@ package io.element.android.features.messages.impl.voicemessages.timeline -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent import io.element.android.libraries.mediaplayer.api.MediaPlayer import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface RedactedVoiceMessageManager { suspend fun onEachMatrixTimelineItem(timelineItems: List) } @ContributesBinding(RoomScope::class) -class DefaultRedactedVoiceMessageManager @Inject constructor( +@Inject +class DefaultRedactedVoiceMessageManager( private val dispatchers: CoroutineDispatchers, private val mediaPlayer: MediaPlayer, ) : RedactedVoiceMessageManager { 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 99b63c6c3d..e3fc689414 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 @@ -8,13 +8,13 @@ package io.element.android.features.messages.impl.voicemessages.timeline import androidx.compose.runtime.Composable -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject -import dagger.multibindings.IntoMap +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.IntoMap +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo 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 @@ -23,7 +23,7 @@ import io.element.android.libraries.di.RoomScope import io.element.android.libraries.voiceplayer.api.VoiceMessagePresenterFactory import io.element.android.libraries.voiceplayer.api.VoiceMessageState -@Module +@BindingContainer @ContributesTo(RoomScope::class) interface VoiceMessagePresenterModule { @Binds @@ -32,7 +32,8 @@ interface VoiceMessagePresenterModule { fun bindVoiceMessagePresenterFactory(factory: VoiceMessagePresenter.Factory): TimelineItemPresenterFactory<*, *> } -class VoiceMessagePresenter @AssistedInject constructor( +@Inject +class VoiceMessagePresenter( voiceMessagePresenterFactory: VoiceMessagePresenterFactory, @Assisted private val content: TimelineItemVoiceContent, ) : Presenter { diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt index a550d86ada..a1dd4509f6 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt @@ -9,14 +9,15 @@ package io.element.android.features.migration.impl import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.api.MigrationEntryPoint import io.element.android.features.api.MigrationState -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultMigrationEntryPoint @Inject constructor( +@Inject +class DefaultMigrationEntryPoint( private val migrationPresenter: MigrationPresenter, ) : MigrationEntryPoint { @Composable diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationStore.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationStore.kt index 61a9ba69a4..78883a4e03 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationStore.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationStore.kt @@ -9,17 +9,18 @@ package io.element.android.features.migration.impl import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.intPreferencesKey -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import javax.inject.Inject private val applicationMigrationVersion = intPreferencesKey("applicationMigrationVersion") @ContributesBinding(AppScope::class) -class DefaultMigrationStore @Inject constructor( +@Inject +class DefaultMigrationStore( preferenceDataStoreFactory: PreferenceDataStoreFactory, ) : MigrationStore { private val store = preferenceDataStoreFactory.create("elementx_migration") diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt index 3d8fc3a0aa..b7f1bdc9be 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt @@ -18,13 +18,14 @@ import io.element.android.features.api.MigrationState import io.element.android.features.migration.impl.migrations.AppMigration import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) -class MigrationPresenter @Inject constructor( +@Inject +class MigrationPresenter( private val migrationStore: MigrationStore, migrations: Set<@JvmSuppressWildcards AppMigration>, ) : Presenter { diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt index 5a851e0b16..de2536f80d 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt @@ -7,16 +7,17 @@ package io.element.android.features.migration.impl.migrations -import com.squareup.anvil.annotations.ContributesMultibinding +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.logs.LogFilesRemover -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope /** * Remove existing logs from the device to remove any leaks of sensitive data. */ -@ContributesMultibinding(AppScope::class) -class AppMigration01 @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class AppMigration01( private val logFilesRemover: LogFilesRemover, ) : AppMigration { override val order: Int = 1 diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt index 7557339fe9..a392d92c79 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt @@ -7,20 +7,21 @@ package io.element.android.features.migration.impl.migrations -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.preferences.api.store.SessionPreferencesStoreFactory import io.element.android.libraries.sessionstorage.api.SessionStore import kotlinx.coroutines.coroutineScope -import javax.inject.Inject /** * This migration sets the skip session verification preference to true for all existing sessions. * This way we don't force existing users to verify their session again. */ -@ContributesMultibinding(AppScope::class) -class AppMigration02 @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class AppMigration02( private val sessionStore: SessionStore, private val sessionPreferenceStoreFactory: SessionPreferencesStoreFactory, ) : AppMigration { diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt index d7e85f7de6..d4040bb52f 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt @@ -7,15 +7,16 @@ package io.element.android.features.migration.impl.migrations -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope /** * This performs the same operation as [AppMigration01], since we need to clear the local logs again. */ -@ContributesMultibinding(AppScope::class) -class AppMigration03 @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class AppMigration03( private val migration01: AppMigration01, ) : AppMigration { override val order: Int = 3 diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration04.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration04.kt index 6023663dac..121cfd963e 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration04.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration04.kt @@ -8,17 +8,18 @@ package io.element.android.features.migration.impl.migrations import android.content.Context -import com.squareup.anvil.annotations.ContributesMultibinding +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext /** * Remove notifications.bin file, used to store notification data locally. */ -@ContributesMultibinding(AppScope::class) -class AppMigration04 @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class AppMigration04( @ApplicationContext private val context: Context, ) : AppMigration { companion object { diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration05.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration05.kt index 2046df315e..21a1759137 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration05.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration05.kt @@ -7,16 +7,19 @@ package io.element.android.features.migration.impl.migrations -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Named +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.BaseDirectory import io.element.android.libraries.sessionstorage.api.SessionStore import java.io.File -import javax.inject.Inject -@ContributesMultibinding(AppScope::class) -class AppMigration05 @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class AppMigration05( private val sessionStore: SessionStore, - private val baseDirectory: File, + @Named("baseDirectory") private val baseDirectory: File, ) : AppMigration { override val order: Int = 5 diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration06.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration06.kt index 618b42dad6..b78271b995 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration06.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration06.kt @@ -7,20 +7,22 @@ package io.element.android.features.migration.impl.migrations -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Named +import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.sessionstorage.api.SessionStore import java.io.File -import javax.inject.Inject /** * Create the cache directory for the existing sessions. */ -@ContributesMultibinding(AppScope::class) -class AppMigration06 @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class AppMigration06( private val sessionStore: SessionStore, - @CacheDirectory private val cacheDirectory: File, + @Named("cacheDirectory") private val cacheDirectory: File, ) : AppMigration { override val order: Int = 6 diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration07.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration07.kt index 63e2fcc16a..1187bb4ef7 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration07.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration07.kt @@ -7,16 +7,17 @@ package io.element.android.features.migration.impl.migrations -import com.squareup.anvil.annotations.ContributesMultibinding +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.logs.LogFilesRemover -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope /** * Delete the previous log files. */ -@ContributesMultibinding(AppScope::class) -class AppMigration07 @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class AppMigration07( private val logFilesRemover: LogFilesRemover, ) : AppMigration { override val order: Int = 7 diff --git a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt index a69cf4bcbc..f94625c61e 100644 --- a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt +++ b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt @@ -13,12 +13,12 @@ import android.content.Context import android.net.ConnectivityManager import android.net.Network import android.net.NetworkRequest -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.networkmonitor.api.NetworkMonitor import io.element.android.features.networkmonitor.api.NetworkStatus -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.FlowPreview @@ -33,11 +33,12 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import timber.log.Timber import java.util.concurrent.atomic.AtomicInteger -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(scope = AppScope::class) @SingleIn(AppScope::class) -class DefaultNetworkMonitor @Inject constructor( +@Inject +class DefaultNetworkMonitor( @ApplicationContext context: Context, @AppCoroutineScope appCoroutineScope: CoroutineScope, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt index 1bb0d87405..26206d27c4 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt @@ -7,17 +7,18 @@ package io.element.android.features.poll.impl.actions -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import im.vector.app.features.analytics.plan.PollEnd import io.element.android.features.poll.api.actions.EndPollAction import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.services.analytics.api.AnalyticsService -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) -class DefaultEndPollAction @Inject constructor( +@Inject +class DefaultEndPollAction( private val analyticsService: AnalyticsService, ) : EndPollAction { override suspend fun execute(timeline: Timeline, pollStartId: EventId): Result { diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt index 757fe1803e..120fb45f4b 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt @@ -7,17 +7,18 @@ package io.element.android.features.poll.impl.actions -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import im.vector.app.features.analytics.plan.PollVote import io.element.android.features.poll.api.actions.SendPollResponseAction import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.services.analytics.api.AnalyticsService -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) -class DefaultSendPollResponseAction @Inject constructor( +@Inject +class DefaultSendPollResponseAction( private val analyticsService: AnalyticsService, ) : SendPollResponseAction { override suspend fun execute(timeline: Timeline, pollStartId: EventId, answerId: String): Result { diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollNode.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollNode.kt index 1a397b96e6..1235843064 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollNode.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.poll.api.create.CreatePollMode @@ -26,7 +26,8 @@ import io.element.android.services.analytics.api.AnalyticsService import java.util.concurrent.atomic.AtomicBoolean @ContributesNode(RoomScope::class) -class CreatePollNode @AssistedInject constructor( +@Inject +class CreatePollNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: CreatePollPresenter.Factory, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenter.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenter.kt index f9f8e59ea8..134742f7d1 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenter.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollPresenter.kt @@ -16,9 +16,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Composer import im.vector.app.features.analytics.plan.PollCreation import io.element.android.features.messages.api.MessageComposerContext @@ -37,7 +37,8 @@ import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.launch import timber.log.Timber -class CreatePollPresenter @AssistedInject constructor( +@Inject +class CreatePollPresenter( repositoryFactory: PollRepository.Factory, private val analyticsService: AnalyticsService, private val messageComposerContext: MessageComposerContext, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt index 019da10de9..67979af892 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.poll.impl.create import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.poll.api.create.CreatePollEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultCreatePollEntryPoint @Inject constructor() : CreatePollEntryPoint { +@Inject +class DefaultCreatePollEntryPoint() : CreatePollEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): CreatePollEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt index ad73b0583f..4fbb7f1499 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/data/PollRepository.kt @@ -7,9 +7,9 @@ package io.element.android.features.poll.impl.data -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.matrix.api.core.EventId @@ -26,7 +26,8 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.first -class PollRepository @AssistedInject constructor( +@Inject +class PollRepository( private val room: JoinedRoom, private val defaultTimelineProvider: TimelineProvider, @Assisted private val timelineMode: Timeline.Mode, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt index 9787216a50..00d1e77eff 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt @@ -9,14 +9,15 @@ package io.element.android.features.poll.impl.history import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.poll.api.history.PollHistoryEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultPollHistoryEntryPoint @Inject constructor() : PollHistoryEntryPoint { +@Inject +class DefaultPollHistoryEntryPoint() : PollHistoryEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext): Node { return parentNode.createNode(buildContext) } diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryFlowNode.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryFlowNode.kt index 48a222e0e7..0dfa7905a2 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryFlowNode.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryFlowNode.kt @@ -15,8 +15,8 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.poll.api.create.CreatePollEntryPoint import io.element.android.features.poll.api.create.CreatePollMode @@ -29,7 +29,8 @@ import io.element.android.libraries.matrix.api.timeline.Timeline import kotlinx.parcelize.Parcelize @ContributesNode(RoomScope::class) -class PollHistoryFlowNode @AssistedInject constructor( +@Inject +class PollHistoryFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val createPollEntryPoint: CreatePollEntryPoint, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryNode.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryNode.kt index f75b268dd6..8cd9a3fc80 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryNode.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryNode.kt @@ -13,14 +13,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId @ContributesNode(RoomScope::class) -class PollHistoryNode @AssistedInject constructor( +@Inject +class PollHistoryNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: PollHistoryPresenter, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt index b144f31609..a48fbfa3b2 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt @@ -29,9 +29,10 @@ import io.element.android.libraries.matrix.api.timeline.Timeline import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PollHistoryPresenter @Inject constructor( +@Inject +class PollHistoryPresenter( @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, private val sendPollResponseAction: SendPollResponseAction, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt index 114cd9b20d..264e8abf72 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt @@ -15,9 +15,10 @@ import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.PollContent import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PollHistoryItemsFactory @Inject constructor( +@Inject +class PollHistoryItemsFactory( private val pollContentStateFactory: PollContentStateFactory, private val dateFormatter: DateFormatter, private val dispatchers: CoroutineDispatchers, diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/model/DefaultPollContentStateFactory.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/model/DefaultPollContentStateFactory.kt index 7ab0d33bc1..0deed34bb3 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/model/DefaultPollContentStateFactory.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/model/DefaultPollContentStateFactory.kt @@ -7,7 +7,7 @@ package io.element.android.features.poll.impl.model -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.poll.api.pollcontent.PollAnswerItem import io.element.android.features.poll.api.pollcontent.PollContentState import io.element.android.features.poll.api.pollcontent.PollContentStateFactory @@ -17,10 +17,11 @@ import io.element.android.libraries.matrix.api.poll.isDisclosed import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.PollContent import kotlinx.collections.immutable.toImmutableList -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) -class DefaultPollContentStateFactory @Inject constructor( +@Inject +class DefaultPollContentStateFactory( private val matrixClient: MatrixClient, ) : PollContentStateFactory { override suspend fun create( diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt index d9d8ad77a4..20335b1672 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt @@ -7,18 +7,19 @@ package io.element.android.features.preferences.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.preferences.api.CacheService -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.SessionId import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultCacheService @Inject constructor() : CacheService { +@Inject +class DefaultCacheService() : CacheService { private val _clearedCacheEventFlow = MutableSharedFlow(0) override val clearedCacheEventFlow: Flow = _clearedCacheEventFlow diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt index a7234fe7f2..9417bd6a97 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.preferences.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.preferences.api.PreferencesEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultPreferencesEntryPoint @Inject constructor() : PreferencesEntryPoint { +@Inject +class DefaultPreferencesEntryPoint() : PreferencesEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): PreferencesEntryPoint.NodeBuilder { return object : PreferencesEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/PreferencesFlowNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/PreferencesFlowNode.kt index b38b835f36..f3a12d0d91 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/PreferencesFlowNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/PreferencesFlowNode.kt @@ -17,8 +17,8 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.deactivation.api.AccountDeactivationEntryPoint import io.element.android.features.licenses.api.OpenSourceLicensesEntryPoint @@ -48,7 +48,8 @@ import io.element.android.libraries.troubleshoot.api.PushHistoryEntryPoint import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class PreferencesFlowNode @AssistedInject constructor( +@Inject +class PreferencesFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val lockScreenEntryPoint: LockScreenEntryPoint, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutNode.kt index 08be506990..9c78e97216 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutNode.kt @@ -14,15 +14,16 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.androidutils.browser.openUrlInChromeCustomTab import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class AboutNode @AssistedInject constructor( +@Inject +class AboutNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: AboutPresenter, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt index 8f0a8096d4..c26d1910d0 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt @@ -9,9 +9,10 @@ package io.element.android.features.preferences.impl.about import androidx.compose.runtime.Composable import io.element.android.libraries.architecture.Presenter -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class AboutPresenter @Inject constructor() : Presenter { +@Inject +class AboutPresenter() : Presenter { @Composable override fun present(): AboutState { return AboutState( diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsNode.kt index f861b76eca..d65b2818b9 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsNode.kt @@ -12,13 +12,14 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class AdvancedSettingsNode @AssistedInject constructor( +@Inject +class AdvancedSettingsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: AdvancedSettingsPresenter, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt index 152e71901c..a763a64765 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt @@ -25,9 +25,10 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class AdvancedSettingsPresenter @Inject constructor( +@Inject +class AdvancedSettingsPresenter( private val appPreferencesStore: AppPreferencesStore, private val sessionPreferencesStore: SessionPreferencesStore, private val mediaPreviewConfigStateStore: MediaPreviewConfigStateStore, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/MediaPreviewConfigStateStore.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/MediaPreviewConfigStateStore.kt index 49f199ec3f..53f0d19f7a 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/MediaPreviewConfigStateStore.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/MediaPreviewConfigStateStore.kt @@ -9,13 +9,13 @@ package io.element.android.features.preferences.impl.advanced import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.runUpdatingState import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.media.MediaPreviewService import io.element.android.libraries.matrix.api.media.MediaPreviewValue @@ -27,7 +27,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject data class MediaPreviewConfigState( val hideInviteAvatars: Boolean, @@ -45,7 +45,8 @@ interface MediaPreviewConfigStateStore { @ContributesBinding(SessionScope::class) @SingleIn(SessionScope::class) -class DefaultMediaPreviewConfigStateStore @Inject constructor( +@Inject +class DefaultMediaPreviewConfigStateStore( @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, private val mediaPreviewService: MediaPreviewService, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsNode.kt index 87f61a9025..1e8765be41 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsNode.kt @@ -12,13 +12,14 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class AnalyticsSettingsNode @AssistedInject constructor( +@Inject +class AnalyticsSettingsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: AnalyticsSettingsPresenter, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsPresenter.kt index 84060b4687..a6a1e9a136 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsPresenter.kt @@ -10,9 +10,10 @@ package io.element.android.features.preferences.impl.analytics import androidx.compose.runtime.Composable import io.element.android.features.analytics.api.preferences.AnalyticsPreferencesState import io.element.android.libraries.architecture.Presenter -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class AnalyticsSettingsPresenter @Inject constructor( +@Inject +class AnalyticsSettingsPresenter( private val analyticsPreferencesPresenter: Presenter, ) : Presenter { @Composable diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersNode.kt index 2dda157ce9..6d1931771f 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersNode.kt @@ -12,13 +12,14 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class BlockedUsersNode @AssistedInject constructor( +@Inject +class BlockedUsersNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: BlockedUsersPresenter, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt index c673276a17..b972ae4319 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt @@ -27,9 +27,10 @@ import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class BlockedUsersPresenter @Inject constructor( +@Inject +class BlockedUsersPresenter( private val matrixClient: MatrixClient, private val featureFlagService: FeatureFlagService, ) : Presenter { diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsNode.kt index 392a6af903..0e93cd9bcd 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsNode.kt @@ -15,14 +15,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.designsystem.showkase.getBrowserIntent import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class DeveloperSettingsNode @AssistedInject constructor( +@Inject +class DeveloperSettingsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: DeveloperSettingsPresenter, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt index 9bd3d93dac..4250871100 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt @@ -46,9 +46,10 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import java.net.URL -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class DeveloperSettingsPresenter @Inject constructor( +@Inject +class DeveloperSettingsPresenter( private val featureFlagService: FeatureFlagService, private val computeCacheSizeUseCase: ComputeCacheSizeUseCase, private val clearCacheUseCase: ClearCacheUseCase, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsNode.kt index 15a6afcd89..d849ce5a97 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsNode.kt @@ -13,13 +13,14 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class NotificationSettingsNode @AssistedInject constructor( +@Inject +class NotificationSettingsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: NotificationSettingsPresenter, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt index 93b7f27b06..1dfe0990e1 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt @@ -39,10 +39,11 @@ import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds -class NotificationSettingsPresenter @Inject constructor( +@Inject +class NotificationSettingsPresenter( private val notificationSettingsService: NotificationSettingsService, private val userPushStoreFactory: UserPushStoreFactory, private val matrixClient: MatrixClient, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/SystemNotificationsEnabledProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/SystemNotificationsEnabledProvider.kt index 309d3d4c68..f4a3c5572c 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/SystemNotificationsEnabledProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/SystemNotificationsEnabledProvider.kt @@ -8,10 +8,10 @@ package io.element.android.features.preferences.impl.notifications import androidx.core.app.NotificationManagerCompat -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn -import javax.inject.Inject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.Inject interface SystemNotificationsEnabledProvider { fun notificationsEnabled(): Boolean @@ -19,7 +19,8 @@ interface SystemNotificationsEnabledProvider { @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultSystemNotificationsEnabledProvider @Inject constructor( +@Inject +class DefaultSystemNotificationsEnabledProvider( private val notificationManager: NotificationManagerCompat, ) : SystemNotificationsEnabledProvider { override fun notificationsEnabled(): Boolean { diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingNode.kt index a56a8d6444..615ff24b53 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -22,7 +22,8 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomId @ContributesNode(SessionScope::class) -class EditDefaultNotificationSettingNode @AssistedInject constructor( +@Inject +class EditDefaultNotificationSettingNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: EditDefaultNotificationSettingPresenter.Factory diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingPresenter.kt index 4eeb56b08a..fec0a5fdcc 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/edit/EditDefaultNotificationSettingPresenter.kt @@ -15,9 +15,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runUpdatingStateNoSuccess @@ -37,7 +37,8 @@ import kotlinx.coroutines.launch import java.text.Collator import kotlin.time.Duration.Companion.seconds -class EditDefaultNotificationSettingPresenter @AssistedInject constructor( +@Inject +class EditDefaultNotificationSettingPresenter( private val notificationSettingsService: NotificationSettingsService, @Assisted private val isOneToOne: Boolean, private val roomListService: RoomListService, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootNode.kt index c1c98be353..92ea472973 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootNode.kt @@ -15,8 +15,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ElementTheme import io.element.android.features.logout.api.direct.DirectLogoutEvents @@ -26,7 +26,8 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.user.MatrixUser @ContributesNode(SessionScope::class) -class PreferencesRootNode @AssistedInject constructor( +@Inject +class PreferencesRootNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: PreferencesRootPresenter, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt index b0bcfed44c..eef8f92760 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt @@ -32,9 +32,10 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PreferencesRootPresenter @Inject constructor( +@Inject +class PreferencesRootPresenter( private val matrixClient: MatrixClient, private val sessionVerificationService: SessionVerificationService, private val analyticsService: AnalyticsService, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt index 63c4681d22..f8d412f530 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt @@ -7,19 +7,20 @@ package io.element.android.features.preferences.impl.root -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface VersionFormatter { fun get(): String } @ContributesBinding(AppScope::class) -class DefaultVersionFormatter @Inject constructor( +@Inject +class DefaultVersionFormatter( private val stringProvider: StringProvider, private val buildMeta: BuildMeta, ) : VersionFormatter { diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ClearCacheUseCase.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ClearCacheUseCase.kt index 9b90c8ba53..8a412a16c3 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ClearCacheUseCase.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ClearCacheUseCase.kt @@ -9,27 +9,28 @@ package io.element.android.features.preferences.impl.tasks import android.content.Context import coil3.SingletonImageLoader -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.ftue.api.state.FtueService import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.preferences.impl.DefaultCacheService import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.push.api.PushService import io.element.android.services.appnavstate.api.ActiveRoomsHolder import kotlinx.coroutines.withContext import okhttp3.OkHttpClient -import javax.inject.Inject -import javax.inject.Provider +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Provider interface ClearCacheUseCase { suspend operator fun invoke() } @ContributesBinding(SessionScope::class) -class DefaultClearCacheUseCase @Inject constructor( +@Inject +class DefaultClearCacheUseCase( @ApplicationContext private val context: Context, private val matrixClient: MatrixClient, private val coroutineDispatchers: CoroutineDispatchers, @@ -51,7 +52,7 @@ class DefaultClearCacheUseCase @Inject constructor( it.memoryCache?.clear() } // Clear OkHttp cache - okHttpClient.get().cache?.delete() + okHttpClient().cache?.delete() // Clear app cache context.cacheDir.deleteRecursively() // Clear some settings diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ComputeCacheSizeUseCase.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ComputeCacheSizeUseCase.kt index 46e565689b..d6fe9d6df4 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ComputeCacheSizeUseCase.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ComputeCacheSizeUseCase.kt @@ -8,22 +8,23 @@ package io.element.android.features.preferences.impl.tasks import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.file.getSizeOfFiles import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface ComputeCacheSizeUseCase { suspend operator fun invoke(): String } @ContributesBinding(SessionScope::class) -class DefaultComputeCacheSizeUseCase @Inject constructor( +@Inject +class DefaultComputeCacheSizeUseCase( @ApplicationContext private val context: Context, private val matrixClient: MatrixClient, private val coroutineDispatchers: CoroutineDispatchers, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileNode.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileNode.kt index 059ac44a83..b80980118a 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileNode.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfileNode.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -21,7 +21,8 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.user.MatrixUser @ContributesNode(SessionScope::class) -class EditUserProfileNode @AssistedInject constructor( +@Inject +class EditUserProfileNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: EditUserProfilePresenter.Factory, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenter.kt index fc8aa0175c..f6069bc442 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenter.kt @@ -19,9 +19,9 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.core.net.toUri -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.file.TemporaryUriDeleter import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter @@ -41,7 +41,8 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -class EditUserProfilePresenter @AssistedInject constructor( +@Inject +class EditUserProfilePresenter( @Assisted private val matrixUser: MatrixUser, private val matrixClient: MatrixClient, private val mediaPickerProvider: PickerProvider, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/utils/ShowDeveloperSettingsProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/utils/ShowDeveloperSettingsProvider.kt index 2ed16d6582..3f1d27be11 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/utils/ShowDeveloperSettingsProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/utils/ShowDeveloperSettingsProvider.kt @@ -13,9 +13,10 @@ import io.element.android.libraries.ui.utils.MultipleTapToUnlock import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ShowDeveloperSettingsProvider @Inject constructor( +@Inject +class ShowDeveloperSettingsProvider( buildMeta: BuildMeta, ) { companion object { diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/DefaultRageshakeFeatureAvailability.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/DefaultRageshakeFeatureAvailability.kt index c9f78a23ce..381c5de3cc 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/DefaultRageshakeFeatureAvailability.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/DefaultRageshakeFeatureAvailability.kt @@ -7,16 +7,17 @@ package io.element.android.features.rageshake.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.rageshake.api.RageshakeFeatureAvailability import io.element.android.features.rageshake.impl.reporter.BugReporterUrlProvider -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultRageshakeFeatureAvailability @Inject constructor( +@Inject +class DefaultRageshakeFeatureAvailability( private val bugReporterUrlProvider: BugReporterUrlProvider, ) : RageshakeFeatureAvailability { override fun isAvailable(): Flow { diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt index c124971efb..3842b0938b 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt @@ -14,17 +14,18 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.rageshake.api.bugreport.BugReportEntryPoint import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.libraries.androidutils.system.toast -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.ui.strings.CommonStrings @ContributesNode(AppScope::class) -class BugReportNode @AssistedInject constructor( +@Inject +class BugReportNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: BugReportPresenter, diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt index f42d252080..ccdae64978 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt @@ -25,9 +25,10 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class BugReportPresenter @Inject constructor( +@Inject +class BugReportPresenter( private val bugReporter: BugReporter, private val crashDataStore: CrashDataStore, private val screenshotHolder: ScreenshotHolder, diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt index 67fec56134..8b3ccae8b9 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.rageshake.impl.bugreport import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.rageshake.api.bugreport.BugReportEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultBugReportEntryPoint @Inject constructor() : BugReportEntryPoint { +@Inject +class DefaultBugReportEntryPoint() : BugReportEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): BugReportEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/DefaultCrashDetectionPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/DefaultCrashDetectionPresenter.kt index 7136393238..6c7db426b4 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/DefaultCrashDetectionPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/DefaultCrashDetectionPresenter.kt @@ -14,22 +14,23 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.rageshake.api.RageshakeFeatureAvailability import io.element.android.features.rageshake.api.crash.CrashDetectionEvents import io.element.android.features.rageshake.api.crash.CrashDetectionPresenter import io.element.android.features.rageshake.api.crash.CrashDetectionState import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultCrashDetectionPresenter @Inject constructor( +@Inject +class DefaultCrashDetectionPresenter( private val buildMeta: BuildMeta, private val crashDataStore: CrashDataStore, private val rageshakeFeatureAvailability: RageshakeFeatureAvailability, diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/PreferencesCrashDataStore.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/PreferencesCrashDataStore.kt index 88f3b5ce0e..a2be13b4cd 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/PreferencesCrashDataStore.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/PreferencesCrashDataStore.kt @@ -10,20 +10,21 @@ package io.element.android.features.rageshake.impl.crash import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.stringPreferencesKey -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.bool.orFalse -import io.element.android.libraries.di.AppScope import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import kotlinx.coroutines.runBlocking -import javax.inject.Inject private val appHasCrashedKey = booleanPreferencesKey("appHasCrashed") private val crashDataKey = stringPreferencesKey("crashData") @ContributesBinding(AppScope::class) -class PreferencesCrashDataStore @Inject constructor( +@Inject +class PreferencesCrashDataStore( preferenceDataStoreFactory: PreferenceDataStoreFactory, ) : CrashDataStore { private val store = preferenceDataStoreFactory.create("elementx_crash") diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/detection/DefaultRageshakeDetectionPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/detection/DefaultRageshakeDetectionPresenter.kt index 1a8aed7051..e4c10bbca1 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/detection/DefaultRageshakeDetectionPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/detection/DefaultRageshakeDetectionPresenter.kt @@ -14,7 +14,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.rageshake.api.detection.RageshakeDetectionEvents import io.element.android.features.rageshake.api.detection.RageshakeDetectionPresenter import io.element.android.features.rageshake.api.detection.RageshakeDetectionState @@ -23,14 +23,15 @@ import io.element.android.features.rageshake.api.preferences.RageshakePreference import io.element.android.features.rageshake.api.screenshot.ImageResult import io.element.android.features.rageshake.impl.rageshake.RageShake import io.element.android.features.rageshake.impl.screenshot.ScreenshotHolder -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultRageshakeDetectionPresenter @Inject constructor( +@Inject +class DefaultRageshakeDetectionPresenter( private val screenshotHolder: ScreenshotHolder, private val rageShake: RageShake, private val preferencesPresenter: RageshakePreferencesPresenter, diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeModule.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeModule.kt index 0df785beb0..f7ab844975 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/RageshakeModule.kt @@ -7,9 +7,9 @@ package io.element.android.features.rageshake.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo import io.element.android.features.rageshake.api.crash.CrashDetectionPresenter import io.element.android.features.rageshake.api.crash.CrashDetectionState import io.element.android.features.rageshake.api.detection.RageshakeDetectionPresenter @@ -17,10 +17,10 @@ import io.element.android.features.rageshake.api.detection.RageshakeDetectionSta import io.element.android.features.rageshake.api.preferences.RageshakePreferencesPresenter import io.element.android.features.rageshake.api.preferences.RageshakePreferencesState import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) -@Module +@BindingContainer interface RageshakeModule { @Binds fun bindRageshakePreferencesPresenter(presenter: RageshakePreferencesPresenter): Presenter diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt index 997dfae323..208894af42 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt @@ -7,15 +7,16 @@ package io.element.android.features.rageshake.impl.logs -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.rageshake.api.logs.LogFilesRemover import io.element.android.features.rageshake.impl.reporter.DefaultBugReporter -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultLogFilesRemover @Inject constructor( +@Inject +class DefaultLogFilesRemover( private val bugReporter: DefaultBugReporter, ) : LogFilesRemover { override suspend fun perform(predicate: (File) -> Boolean) { diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/preferences/DefaultRageshakePreferencesPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/preferences/DefaultRageshakePreferencesPresenter.kt index 6096388e21..ee6798318c 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/preferences/DefaultRageshakePreferencesPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/preferences/DefaultRageshakePreferencesPresenter.kt @@ -15,20 +15,21 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.rageshake.api.RageshakeFeatureAvailability import io.element.android.features.rageshake.api.preferences.RageshakePreferencesEvents import io.element.android.features.rageshake.api.preferences.RageshakePreferencesPresenter import io.element.android.features.rageshake.api.preferences.RageshakePreferencesState import io.element.android.features.rageshake.impl.rageshake.RageShake import io.element.android.features.rageshake.impl.rageshake.RageshakeDataStore -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultRageshakePreferencesPresenter @Inject constructor( +@Inject +class DefaultRageshakePreferencesPresenter( private val rageshake: RageShake, private val rageshakeDataStore: RageshakeDataStore, private val rageshakeFeatureAvailability: RageshakeFeatureAvailability, diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/DefaultRageShake.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/DefaultRageShake.kt index 651b71c079..060538c97b 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/DefaultRageShake.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/DefaultRageShake.kt @@ -11,16 +11,18 @@ import android.content.Context import android.hardware.Sensor import android.hardware.SensorManager import androidx.core.content.getSystemService -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import com.squareup.seismic.ShakeDetector -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding @SingleIn(AppScope::class) -@ContributesBinding(scope = AppScope::class, boundType = RageShake::class) -class DefaultRageShake @Inject constructor( +@ContributesBinding(scope = AppScope::class, binding = binding()) +@Inject +class DefaultRageShake( @ApplicationContext context: Context, ) : ShakeDetector.Listener, RageShake { private var sensorManager = context.getSystemService() diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/PreferencesRageshakeDataStore.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/PreferencesRageshakeDataStore.kt index 0642f20e12..32be2f7e95 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/PreferencesRageshakeDataStore.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/PreferencesRageshakeDataStore.kt @@ -10,19 +10,20 @@ package io.element.android.features.rageshake.impl.rageshake import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.floatPreferencesKey -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.bool.orFalse -import io.element.android.libraries.di.AppScope import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import javax.inject.Inject private val enabledKey = booleanPreferencesKey("enabled") private val sensitivityKey = floatPreferencesKey("sensitivity") @ContributesBinding(AppScope::class) -class PreferencesRageshakeDataStore @Inject constructor( +@Inject +class PreferencesRageshakeDataStore( preferenceDataStoreFactory: PreferenceDataStoreFactory, ) : RageshakeDataStore { private val store = preferenceDataStoreFactory.create("elementx_rageshake") diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt index b63dfcf669..9cb32c4055 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt @@ -7,16 +7,17 @@ package io.element.android.features.rageshake.impl.reporter -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.RageshakeConfig -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject fun interface BugReportAppNameProvider { fun provide(): String } @ContributesBinding(AppScope::class) -class DefaultBugReportAppNameProvider @Inject constructor() : BugReportAppNameProvider { +@Inject +class DefaultBugReportAppNameProvider() : BugReportAppNameProvider { override fun provide(): String = RageshakeConfig.BUG_REPORT_APP_NAME } diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt index d56c75f464..e2d92da583 100755 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt @@ -11,7 +11,7 @@ import android.content.Context import android.os.Build import androidx.core.net.toFile import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.RageshakeConfig import io.element.android.features.rageshake.api.logs.createWriteToFilesConfiguration import io.element.android.features.rageshake.api.reporter.BugReporter @@ -24,9 +24,9 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.mimetype.MimeTypes -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.SdkMetadata import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService @@ -55,15 +55,16 @@ import java.time.LocalDateTime import java.time.ZoneOffset import java.time.format.DateTimeFormatter import java.util.Locale -import javax.inject.Inject -import javax.inject.Provider +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Provider /** * BugReporter creates and sends the bug reports. */ @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultBugReporter @Inject constructor( +@Inject +class DefaultBugReporter( @ApplicationContext private val context: Context, private val screenshotHolder: ScreenshotHolder, private val crashDataStore: CrashDataStore, @@ -255,7 +256,7 @@ class DefaultBugReporter @Inject constructor( var errorMessage: String? = null // trigger the request try { - response = okHttpClient.get() + response = okHttpClient() .newCall(request) .execute() } catch (e: CancellationException) { diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterUrlProvider.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterUrlProvider.kt index 3ebe5c1c29..0453673c7b 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterUrlProvider.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterUrlProvider.kt @@ -7,20 +7,21 @@ package io.element.android.features.rageshake.impl.reporter -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.RageshakeConfig import io.element.android.features.enterprise.api.BugReportUrl import io.element.android.features.enterprise.api.EnterpriseService -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultBugReporterUrlProvider @Inject constructor( +@Inject +class DefaultBugReporterUrlProvider( private val bugReportAppNameProvider: BugReportAppNameProvider, private val enterpriseService: EnterpriseService, ) : BugReporterUrlProvider { diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/screenshot/DefaultScreenshotHolder.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/screenshot/DefaultScreenshotHolder.kt index dd3674ab26..c87bd98f44 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/screenshot/DefaultScreenshotHolder.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/screenshot/DefaultScreenshotHolder.kt @@ -10,18 +10,19 @@ package io.element.android.features.rageshake.impl.screenshot import android.content.Context import android.graphics.Bitmap import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.bitmap.writeBitmap import io.element.android.libraries.androidutils.file.safeDelete -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultScreenshotHolder @Inject constructor( +@Inject +class DefaultScreenshotHolder( @ApplicationContext private val context: Context, ) : ScreenshotHolder { private val file = File(context.filesDir, "screenshot.png") diff --git a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt index d3131040d9..e43a7505e8 100644 --- a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt +++ b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt @@ -9,15 +9,16 @@ package io.element.android.features.reportroom.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.reportroom.api.ReportRoomEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.RoomId -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultReportRoomEntryPoint @Inject constructor() : ReportRoomEntryPoint { +@Inject +class DefaultReportRoomEntryPoint() : ReportRoomEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext, roomId: RoomId): Node { return parentNode.createNode(buildContext, plugins = listOf(ReportRoomNode.Inputs(roomId))) } diff --git a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoom.kt b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoom.kt index 55ccb25417..71a493bff7 100644 --- a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoom.kt +++ b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoom.kt @@ -7,11 +7,11 @@ package io.element.android.features.reportroom.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface ReportRoom { suspend operator fun invoke( @@ -29,7 +29,8 @@ interface ReportRoom { } @ContributesBinding(SessionScope::class) -class DefaultReportRoom @Inject constructor( +@Inject +class DefaultReportRoom( private val client: MatrixClient, ) : ReportRoom { override suspend operator fun invoke( diff --git a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomNode.kt b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomNode.kt index 0c24d6db74..8a880fe3d0 100644 --- a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomNode.kt +++ b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomNode.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -21,7 +21,8 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomId @ContributesNode(SessionScope::class) -class ReportRoomNode @AssistedInject constructor( +@Inject +class ReportRoomNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: ReportRoomPresenter.Factory, diff --git a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomPresenter.kt b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomPresenter.kt index 30ccb9e20c..fccea0e576 100644 --- a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomPresenter.kt +++ b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoomPresenter.kt @@ -15,9 +15,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runUpdatingState @@ -25,7 +25,8 @@ import io.element.android.libraries.matrix.api.core.RoomId import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class ReportRoomPresenter @AssistedInject constructor( +@Inject +class ReportRoomPresenter( @Assisted private val roomId: RoomId, private val reportRoom: ReportRoom, ) : Presenter { diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt index 9b86ba368c..ec342eb7ec 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.roomaliasresolver.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.roomaliasesolver.api.RoomAliasResolverEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultRoomAliasResolverEntryPoint @Inject constructor() : RoomAliasResolverEntryPoint { +@Inject +class DefaultRoomAliasResolverEntryPoint() : RoomAliasResolverEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): RoomAliasResolverEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverNode.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverNode.kt index d72158fb9c..88363db690 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverNode.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.roomaliasesolver.api.RoomAliasResolverEntryPoint import io.element.android.libraries.architecture.inputs @@ -22,7 +22,8 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.room.alias.ResolvedRoomAlias @ContributesNode(SessionScope::class) -class RoomAliasResolverNode @AssistedInject constructor( +@Inject +class RoomAliasResolverNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: RoomAliasResolverPresenter.Factory, diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt index 34c655bd68..95ed62a819 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/RoomAliasResolverPresenter.kt @@ -13,8 +13,8 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runCatchingUpdatingState @@ -25,7 +25,8 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import kotlin.jvm.optionals.getOrElse -class RoomAliasResolverPresenter @AssistedInject constructor( +@Inject +class RoomAliasResolverPresenter( @Assisted private val roomAlias: RoomAlias, private val matrixClient: MatrixClient, ) : 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/RoomAliasResolverModule.kt index 9846169eda..cce26ec602 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/RoomAliasResolverModule.kt @@ -7,15 +7,15 @@ package io.element.android.features.roomaliasresolver.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.features.roomaliasresolver.impl.RoomAliasResolverPresenter import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomAlias -@Module +@BindingContainer @ContributesTo(SessionScope::class) object RoomAliasResolverModule { @Provides diff --git a/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt b/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt index 47af2c24fc..96ee3594b5 100644 --- a/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt +++ b/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt @@ -20,9 +20,10 @@ import io.element.android.features.roomcall.api.RoomCallState import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.ui.room.canCall -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RoomCallStatePresenter @Inject constructor( +@Inject +class RoomCallStatePresenter( private val room: JoinedRoom, private val currentCallService: CurrentCallService, private val sessionEnterpriseService: SessionEnterpriseService, 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/RoomCallModule.kt index cd02ae8b7d..b3c6b4dccd 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/RoomCallModule.kt @@ -7,16 +7,16 @@ package io.element.android.features.roomcall.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo import io.element.android.features.roomcall.api.RoomCallState import io.element.android.features.roomcall.impl.RoomCallStatePresenter import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.RoomScope @ContributesTo(RoomScope::class) -@Module +@BindingContainer interface RoomCallModule { @Binds fun bindRoomCallStatePresenter(presenter: RoomCallStatePresenter): Presenter diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt index ea5a0873e0..8b35899a47 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt @@ -10,16 +10,17 @@ package io.element.android.features.roomdetails.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint.InitialTarget import io.element.android.features.roomdetails.impl.RoomDetailsFlowNode.NavTarget import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultRoomDetailsEntryPoint @Inject constructor() : RoomDetailsEntryPoint { +@Inject +class DefaultRoomDetailsEntryPoint() : RoomDetailsEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): RoomDetailsEntryPoint.NodeBuilder { return object : RoomDetailsEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt index a802d5cd0a..484d9ea416 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsFlowNode.kt @@ -20,8 +20,8 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Interaction import io.element.android.anvilannotations.ContributesNode import io.element.android.appconfig.LearnMoreConfig @@ -67,7 +67,8 @@ import kotlinx.coroutines.withContext import kotlinx.parcelize.Parcelize @ContributesNode(RoomScope::class) -class RoomDetailsFlowNode @AssistedInject constructor( +@Inject +class RoomDetailsFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val pollHistoryEntryPoint: PollHistoryEntryPoint, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt index d9df8cbc1c..79f0d10cf0 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsNode.kt @@ -19,8 +19,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.leaveroom.api.LeaveRoomRenderer @@ -36,7 +36,8 @@ import timber.log.Timber import io.element.android.libraries.androidutils.R as AndroidUtilsR @ContributesNode(RoomScope::class) -class RoomDetailsNode @AssistedInject constructor( +@Inject +class RoomDetailsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: RoomDetailsPresenter, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index 026b616996..8c3247d43a 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -55,9 +55,10 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RoomDetailsPresenter @Inject constructor( +@Inject +class RoomDetailsPresenter( private val client: MatrixClient, private val room: JoinedRoom, private val featureFlagService: FeatureFlagService, 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/RoomMemberModule.kt index 15afcbc99f..9ca7b87c00 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/RoomMemberModule.kt @@ -7,9 +7,9 @@ package io.element.android.features.roomdetails.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsPresenter import io.element.android.features.userprofile.api.UserProfilePresenterFactory import io.element.android.libraries.androidutils.clipboard.ClipboardHelper @@ -18,7 +18,7 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.encryption.EncryptionService import io.element.android.libraries.matrix.api.room.JoinedRoom -@Module +@BindingContainer @ContributesTo(RoomScope::class) object RoomMemberModule { @Provides diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditNode.kt index 8cd53405f5..b445778592 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditNode.kt @@ -13,15 +13,16 @@ import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.RoomScope import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(RoomScope::class) -class RoomDetailsEditNode @AssistedInject constructor( +@Inject +class RoomDetailsEditNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: RoomDetailsEditPresenter, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt index ae324b4027..26f66aa37d 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt @@ -42,9 +42,10 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RoomDetailsEditPresenter @Inject constructor( +@Inject +class RoomDetailsEditPresenter( private val room: JoinedRoom, private val mediaPickerProvider: PickerProvider, private val mediaPreProcessor: MediaPreProcessor, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersNode.kt index dc269e7322..c71776f381 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.invitepeople.api.InvitePeoplePresenter @@ -24,7 +24,8 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(RoomScope::class) -class RoomInviteMembersNode @AssistedInject constructor( +@Inject +class RoomInviteMembersNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val analyticsService: AnalyticsService, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt index ef627a4992..33fc515d60 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt @@ -13,9 +13,10 @@ import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.roomMembers import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RoomMemberListDataSource @Inject constructor( +@Inject +class RoomMemberListDataSource( private val room: BaseRoom, private val coroutineDispatchers: CoroutineDispatchers, ) { diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListNode.kt index 3d7fecd0ae..2fdfb5c8b0 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListNode.kt @@ -14,8 +14,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.roommembermoderation.api.ModerationAction @@ -26,7 +26,8 @@ import io.element.android.libraries.matrix.api.core.UserId import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(RoomScope::class) -class RoomMemberListNode @AssistedInject constructor( +@Inject +class RoomMemberListNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: RoomMemberListPresenter, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt index 315a98248a..b6e7d48fed 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt @@ -45,9 +45,10 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RoomMemberListPresenter @Inject constructor( +@Inject +class RoomMemberListPresenter( private val room: JoinedRoom, private val roomMemberListDataSource: RoomMemberListDataSource, private val coroutineDispatchers: CoroutineDispatchers, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt index 6a1af42694..2f3adbc8c5 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsNode.kt @@ -14,8 +14,8 @@ import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.userprofile.shared.UserProfileNodeHelper @@ -29,7 +29,8 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkBuilder import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(RoomScope::class) -class RoomMemberDetailsNode @AssistedInject constructor( +@Inject +class RoomMemberDetailsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val analyticsService: AnalyticsService, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt index d2d5db00e9..61c1eb9019 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsPresenter.kt @@ -14,8 +14,8 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.features.userprofile.api.UserProfileEvents import io.element.android.features.userprofile.api.UserProfilePresenterFactory import io.element.android.features.userprofile.api.UserProfileState @@ -41,7 +41,8 @@ import kotlinx.coroutines.launch * Presenter for room member details screen. * Rely on UserProfilePresenter, but override some fields with room member info when available. */ -class RoomMemberDetailsPresenter @AssistedInject constructor( +@Inject +class RoomMemberDetailsPresenter( @Assisted private val roomMemberId: UserId, private val room: JoinedRoom, private val encryptionService: EncryptionService, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsNode.kt index dc2660f566..8590dcbb96 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsNode.kt @@ -14,8 +14,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs @@ -24,7 +24,8 @@ import io.element.android.libraries.di.RoomScope import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(RoomScope::class) -class RoomNotificationSettingsNode @AssistedInject constructor( +@Inject +class RoomNotificationSettingsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: RoomNotificationSettingsPresenter.Factory, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt index fb7a3b03da..93e22a9d9e 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/notificationsettings/RoomNotificationSettingsPresenter.kt @@ -17,9 +17,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter @@ -37,7 +37,8 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlin.time.Duration.Companion.seconds -class RoomNotificationSettingsPresenter @AssistedInject constructor( +@Inject +class RoomNotificationSettingsPresenter( private val room: JoinedRoom, private val notificationSettingsService: NotificationSettingsService, @Assisted private val showUserDefinedSettingStyle: Boolean, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsFlowNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsFlowNode.kt index dbe1eec70a..a2d29bdd39 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsFlowNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsFlowNode.kt @@ -17,8 +17,8 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRolesEntryPoint import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRolesListType @@ -33,7 +33,8 @@ import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize @ContributesNode(RoomScope::class) -class RolesAndPermissionsFlowNode @AssistedInject constructor( +@Inject +class RolesAndPermissionsFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val changeRoomMemberRolesEntryPoint: ChangeRoomMemberRolesEntryPoint, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsNode.kt index 80e2d007a3..0fdc6a4b56 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsNode.kt @@ -15,8 +15,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.room.BaseRoom @@ -29,7 +29,8 @@ import kotlinx.coroutines.flow.take import kotlinx.coroutines.launch @ContributesNode(RoomScope::class) -class RolesAndPermissionsNode @AssistedInject constructor( +@Inject +class RolesAndPermissionsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: RolesAndPermissionsPresenter, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsPresenter.kt index df62dbbbc0..a1606a8f17 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsPresenter.kt @@ -30,9 +30,10 @@ import io.element.android.libraries.matrix.ui.model.roleOf import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RolesAndPermissionsPresenter @Inject constructor( +@Inject +class RolesAndPermissionsPresenter( private val room: JoinedRoom, private val dispatchers: CoroutineDispatchers, private val analyticsService: AnalyticsService, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsNode.kt index 36c3619d38..c0c4a3a4f2 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsNode.kt @@ -13,8 +13,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -22,7 +22,8 @@ import io.element.android.libraries.di.RoomScope import kotlinx.parcelize.Parcelize @ContributesNode(RoomScope::class) -class ChangeRoomPermissionsNode @AssistedInject constructor( +@Inject +class ChangeRoomPermissionsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: ChangeRoomPermissionsPresenter.Factory, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsPresenter.kt index 8b6f7efc96..f010fd6057 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/permissions/ChangeRoomPermissionsPresenter.kt @@ -15,9 +15,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.roomdetails.impl.analytics.trackPermissionChangeAnalytics import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter @@ -29,7 +29,8 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class ChangeRoomPermissionsPresenter @AssistedInject constructor( +@Inject +class ChangeRoomPermissionsPresenter( @Assisted private val section: ChangeRoomPermissionsSection, private val room: JoinedRoom, private val analyticsService: AnalyticsService, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyFlowNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyFlowNode.kt index 22fecf6143..8db19f6f1f 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyFlowNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyFlowNode.kt @@ -14,8 +14,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.roomdetails.impl.securityandprivacy.editroomaddress.EditRoomAddressNode import io.element.android.libraries.architecture.BackstackView @@ -25,7 +25,8 @@ import io.element.android.libraries.di.RoomScope import kotlinx.parcelize.Parcelize @ContributesNode(RoomScope::class) -class SecurityAndPrivacyFlowNode @AssistedInject constructor( +@Inject +class SecurityAndPrivacyFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : BaseFlowNode( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyNode.kt index 537306f44f..df019c9e70 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyNode.kt @@ -13,13 +13,14 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.RoomScope @ContributesNode(RoomScope::class) -class SecurityAndPrivacyNode @AssistedInject constructor( +@Inject +class SecurityAndPrivacyNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: SecurityAndPrivacyPresenter.Factory, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyPresenter.kt index 35ecbc0d51..a2a55aed68 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/SecurityAndPrivacyPresenter.kt @@ -17,9 +17,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.roomdetails.impl.securityandprivacy.editroomaddress.matchesServer import io.element.android.features.roomdetails.impl.securityandprivacy.permissions.securityAndPrivacyPermissionsAsState import io.element.android.libraries.architecture.AsyncAction @@ -40,7 +40,8 @@ import kotlinx.coroutines.awaitAll import kotlinx.coroutines.delay import kotlinx.coroutines.launch -class SecurityAndPrivacyPresenter @AssistedInject constructor( +@Inject +class SecurityAndPrivacyPresenter( @Assisted private val navigator: SecurityAndPrivacyNavigator, private val matrixClient: MatrixClient, private val room: JoinedRoom, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressNode.kt index efdae76b61..ac0960fffc 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressNode.kt @@ -13,14 +13,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.roomdetails.impl.securityandprivacy.SecurityAndPrivacyNavigator import io.element.android.libraries.di.RoomScope @ContributesNode(RoomScope::class) -class EditRoomAddressNode @AssistedInject constructor( +@Inject +class EditRoomAddressNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: EditRoomAddressPresenter.Factory, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressPresenter.kt index 32af99dc1d..db02c60346 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/securityandprivacy/editroomaddress/EditRoomAddressPresenter.kt @@ -16,9 +16,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.roomdetails.impl.securityandprivacy.SecurityAndPrivacyNavigator import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter @@ -34,7 +34,8 @@ import io.element.android.libraries.matrix.ui.room.address.RoomAddressValidityEf import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class EditRoomAddressPresenter @AssistedInject constructor( +@Inject +class EditRoomAddressPresenter( @Assisted private val navigator: SecurityAndPrivacyNavigator, private val client: MatrixClient, private val room: JoinedRoom, diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt index f3963cb0dd..a0e216bde5 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt @@ -10,15 +10,16 @@ package io.element.android.features.roomdirectory.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.roomdirectory.api.RoomDirectoryEntryPoint import io.element.android.features.roomdirectory.impl.root.RoomDirectoryNode import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultRoomDirectoryEntryPoint @Inject constructor() : RoomDirectoryEntryPoint { +@Inject +class DefaultRoomDirectoryEntryPoint() : RoomDirectoryEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): RoomDirectoryEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryNode.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryNode.kt index d4b6026833..b716253596 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryNode.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryNode.kt @@ -13,15 +13,16 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.roomdirectory.api.RoomDescription import io.element.android.features.roomdirectory.api.RoomDirectoryEntryPoint import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class RoomDirectoryNode @AssistedInject constructor( +@Inject +class RoomDirectoryNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: RoomDirectoryPresenter, diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt index 969eaa8352..e080df1104 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt @@ -26,11 +26,12 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.delay import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val SEARCH_BATCH_SIZE = 20 -class RoomDirectoryPresenter @Inject constructor( +@Inject +class RoomDirectoryPresenter( private val dispatchers: CoroutineDispatchers, private val roomDirectoryService: RoomDirectoryService, ) : Presenter { diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt index 681a1eb733..8655c6d50c 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt @@ -10,17 +10,18 @@ package io.element.android.features.roommembermoderation.impl import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.ui.Modifier -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.roommembermoderation.api.ModerationAction import io.element.android.features.roommembermoderation.api.RoomMemberModerationRenderer import io.element.android.features.roommembermoderation.api.RoomMemberModerationState import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.user.MatrixUser import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) -class DefaultRoomMemberModerationRenderer @Inject constructor() : RoomMemberModerationRenderer { +@Inject +class DefaultRoomMemberModerationRenderer() : RoomMemberModerationRenderer { @Composable override fun Render( state: RoomMemberModerationState, diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt index 71b7640e66..3d07ee75e1 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationPresenter.kt @@ -15,6 +15,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.RoomModeration import io.element.android.features.roommembermoderation.api.ModerationAction import io.element.android.features.roommembermoderation.api.ModerationActionState @@ -42,10 +43,10 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch -import javax.inject.Inject import kotlin.time.Duration.Companion.milliseconds -class RoomMemberModerationPresenter @Inject constructor( +@Inject +class RoomMemberModerationPresenter( private val room: JoinedRoom, private val dispatchers: CoroutineDispatchers, private val analyticsService: AnalyticsService, 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/RoomMemberModerationModule.kt index d2a5296b95..a70d2ca1d2 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/RoomMemberModerationModule.kt @@ -7,16 +7,16 @@ package io.element.android.features.roommembermoderation.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo import io.element.android.features.roommembermoderation.api.RoomMemberModerationState import io.element.android.features.roommembermoderation.impl.RoomMemberModerationPresenter import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.RoomScope @ContributesTo(RoomScope::class) -@Module +@BindingContainer interface RoomMemberModerationModule { @Binds fun bindRoomMemberModerationPresenter(presenter: RoomMemberModerationPresenter): Presenter diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt index 7d68c09496..b43fd2a904 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.securebackup.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.securebackup.api.SecureBackupEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultSecureBackupEntryPoint @Inject constructor() : SecureBackupEntryPoint { +@Inject +class DefaultSecureBackupEntryPoint() : SecureBackupEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): SecureBackupEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/SecureBackupFlowNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/SecureBackupFlowNode.kt index 92e2899173..da04ef56b1 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/SecureBackupFlowNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/SecureBackupFlowNode.kt @@ -17,8 +17,8 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.securebackup.api.SecureBackupEntryPoint import io.element.android.features.securebackup.impl.disable.SecureBackupDisableNode @@ -34,7 +34,8 @@ import io.element.android.libraries.di.SessionScope import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class SecureBackupFlowNode @AssistedInject constructor( +@Inject +class SecureBackupFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : BaseFlowNode( diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisableNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisableNode.kt index 5d76d6ee08..b4521906a8 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisableNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisableNode.kt @@ -12,13 +12,14 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class SecureBackupDisableNode @AssistedInject constructor( +@Inject +class SecureBackupDisableNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: SecureBackupDisablePresenter, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisablePresenter.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisablePresenter.kt index 0acf867095..43895c8152 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisablePresenter.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisablePresenter.kt @@ -23,9 +23,10 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class SecureBackupDisablePresenter @Inject constructor( +@Inject +class SecureBackupDisablePresenter( private val encryptionService: EncryptionService, private val buildMeta: BuildMeta, ) : Presenter { diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyNode.kt index e8d31780bb..414ad5ee87 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyNode.kt @@ -13,13 +13,14 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class SecureBackupEnterRecoveryKeyNode @AssistedInject constructor( +@Inject +class SecureBackupEnterRecoveryKeyNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: SecureBackupEnterRecoveryKeyPresenter, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyPresenter.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyPresenter.kt index 313f1526af..08dd3ff8ed 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyPresenter.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyPresenter.kt @@ -24,9 +24,10 @@ import io.element.android.libraries.architecture.runCatchingUpdatingState import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class SecureBackupEnterRecoveryKeyPresenter @Inject constructor( +@Inject +class SecureBackupEnterRecoveryKeyPresenter( private val encryptionService: EncryptionService, private val recoveryKeyTools: RecoveryKeyTools, ) : Presenter { diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowManager.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowManager.kt index a0827e4061..e782c88c98 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowManager.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowManager.kt @@ -20,9 +20,10 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ResetIdentityFlowManager @Inject constructor( +@Inject +class ResetIdentityFlowManager( private val matrixClient: MatrixClient, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, private val sessionVerificationService: SessionVerificationService, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowNode.kt index 6ce66d149d..30fdbf4399 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowNode.kt @@ -23,8 +23,8 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ElementTheme import io.element.android.features.securebackup.impl.reset.password.ResetIdentityPasswordNode @@ -47,7 +47,8 @@ import kotlinx.parcelize.Parcelize import timber.log.Timber @ContributesNode(SessionScope::class) -class ResetIdentityFlowNode @AssistedInject constructor( +@Inject +class ResetIdentityFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val resetIdentityFlowManager: ResetIdentityFlowManager, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/password/ResetIdentityPasswordNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/password/ResetIdentityPasswordNode.kt index dd1463314d..67ddfd1cdb 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/password/ResetIdentityPasswordNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/password/ResetIdentityPasswordNode.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -22,7 +22,8 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.encryption.IdentityPasswordResetHandle @ContributesNode(SessionScope::class) -class ResetIdentityPasswordNode @AssistedInject constructor( +@Inject +class ResetIdentityPasswordNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, coroutineDispatchers: CoroutineDispatchers, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/root/ResetIdentityRootNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/root/ResetIdentityRootNode.kt index 626edc9c67..9ee4cb9b54 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/root/ResetIdentityRootNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/root/ResetIdentityRootNode.kt @@ -12,13 +12,14 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class ResetIdentityRootNode @AssistedInject constructor( +@Inject +class ResetIdentityRootNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : Node(buildContext, plugins = plugins) { diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootNode.kt index 5d4196b485..774259ebd9 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootNode.kt @@ -15,14 +15,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.appconfig.LearnMoreConfig import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class SecureBackupRootNode @AssistedInject constructor( +@Inject +class SecureBackupRootNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: SecureBackupRootPresenter, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootPresenter.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootPresenter.kt index 4b9d768fcc..313cccc7a4 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootPresenter.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootPresenter.kt @@ -30,9 +30,10 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class SecureBackupRootPresenter @Inject constructor( +@Inject +class SecureBackupRootPresenter( private val encryptionService: EncryptionService, private val buildMeta: BuildMeta, private val snackbarDispatcher: SnackbarDispatcher, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupNode.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupNode.kt index 03f4424158..df1a4c8cd5 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupNode.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupNode.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.securebackup.impl.R import io.element.android.libraries.architecture.NodeInputs @@ -23,7 +23,8 @@ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class SecureBackupSetupNode @AssistedInject constructor( +@Inject +class SecureBackupSetupNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: SecureBackupSetupPresenter.Factory, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupPresenter.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupPresenter.kt index eb84ac5341..35dd8356da 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupPresenter.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupPresenter.kt @@ -18,9 +18,9 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import com.freeletics.flowredux.compose.StateAndDispatch import com.freeletics.flowredux.compose.rememberStateAndDispatch -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.securebackup.impl.loggerTagSetup import io.element.android.features.securebackup.impl.setup.views.RecoveryKeyUserStory import io.element.android.features.securebackup.impl.setup.views.RecoveryKeyViewState @@ -32,7 +32,8 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.launch import timber.log.Timber -class SecureBackupSetupPresenter @AssistedInject constructor( +@Inject +class SecureBackupSetupPresenter( @Assisted private val isChangeRecoveryKeyUserStory: Boolean, private val stateMachine: SecureBackupSetupStateMachine, private val encryptionService: EncryptionService, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt index 4fbf3f3fd2..c630aced7d 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt @@ -12,10 +12,11 @@ package io.element.android.features.securebackup.impl.setup import com.freeletics.flowredux.dsl.FlowReduxStateMachine import kotlinx.coroutines.ExperimentalCoroutinesApi -import javax.inject.Inject +import dev.zacsweers.metro.Inject import com.freeletics.flowredux.dsl.State as MachineState -class SecureBackupSetupStateMachine @Inject constructor() : FlowReduxStateMachine( +@Inject +class SecureBackupSetupStateMachine() : FlowReduxStateMachine( initialState = State.Initial ) { init { diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/tools/RecoveryKeyTools.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/tools/RecoveryKeyTools.kt index 7623324052..45305e9169 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/tools/RecoveryKeyTools.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/tools/RecoveryKeyTools.kt @@ -7,12 +7,13 @@ package io.element.android.features.securebackup.impl.tools -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val RECOVERY_KEY_LENGTH = 48 private const val BASE_58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" -class RecoveryKeyTools @Inject constructor() { +@Inject +class RecoveryKeyTools() { fun isRecoveryKeyFormatValid(recoveryKey: String): Boolean { val recoveryKeyWithoutSpace = recoveryKey.replace("\\s+".toRegex(), "") return recoveryKeyWithoutSpace.length == RECOVERY_KEY_LENGTH && recoveryKeyWithoutSpace.all { BASE_58_ALPHABET.contains(it) } diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt index 3ec2f42d80..e899beef02 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.share.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.share.api.ShareEntryPoint import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.SessionScope -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultShareEntryPoint @Inject constructor() : ShareEntryPoint { +@Inject +class DefaultShareEntryPoint() : ShareEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): ShareEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt index b2b1dd36e6..2249e157ac 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt @@ -15,7 +15,7 @@ import android.content.pm.ResolveInfo import android.net.Uri import android.os.Build import androidx.core.content.IntentCompat -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.compat.queryIntentActivitiesCompat import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeAny @@ -25,10 +25,10 @@ import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeFile import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeImage import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeText import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeVideo -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface ShareIntentHandler { data class UriToShare( @@ -49,7 +49,8 @@ interface ShareIntentHandler { } @ContributesBinding(AppScope::class) -class DefaultShareIntentHandler @Inject constructor( +@Inject +class DefaultShareIntentHandler( @ApplicationContext private val context: Context, ) : ShareIntentHandler { override suspend fun handleIncomingShareIntent( diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareNode.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareNode.kt index 6d04db6e43..201ad1c55b 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareNode.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareNode.kt @@ -18,8 +18,8 @@ import com.bumble.appyx.core.navigation.model.permanent.PermanentNavModel import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.share.api.ShareEntryPoint import io.element.android.libraries.architecture.NodeInputs @@ -31,7 +31,8 @@ import io.element.android.libraries.roomselect.api.RoomSelectMode import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class ShareNode @AssistedInject constructor( +@Inject +class ShareNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: SharePresenter.Factory, diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt index b66765f472..aaadf6f8d0 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/SharePresenter.kt @@ -11,9 +11,9 @@ import android.content.Intent import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runCatchingUpdatingState @@ -31,7 +31,8 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import kotlin.coroutines.cancellation.CancellationException -class SharePresenter @AssistedInject constructor( +@Inject +class SharePresenter( @Assisted private val intent: Intent, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, diff --git a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt index b239d1bb8a..6d003e3667 100644 --- a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt +++ b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.signedout.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.signedout.api.SignedOutEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultSignedOutEntryPoint @Inject constructor() : SignedOutEntryPoint { +@Inject +class DefaultSignedOutEntryPoint() : SignedOutEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): SignedOutEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt index 2e081b2b89..4e90502325 100644 --- a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt +++ b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt @@ -12,16 +12,17 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.SessionId @ContributesNode(AppScope::class) -class SignedOutNode @AssistedInject constructor( +@Inject +class SignedOutNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: SignedOutPresenter.Factory, diff --git a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutPresenter.kt b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutPresenter.kt index 773954c3e0..6516a2a1c6 100644 --- a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutPresenter.kt +++ b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutPresenter.kt @@ -13,15 +13,16 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.sessionstorage.api.SessionStore import kotlinx.coroutines.launch -class SignedOutPresenter @AssistedInject constructor( +@Inject +class SignedOutPresenter( // Cannot inject SessionId @Assisted private val sessionId: String, private val sessionStore: SessionStore, diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt index 9f9073f1d7..16dccd1ff6 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.startchat.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.startchat.api.StartChatEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultStartChatEntryPoint @Inject constructor() : StartChatEntryPoint { +@Inject +class DefaultStartChatEntryPoint() : StartChatEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): StartChatEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartDMAction.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartDMAction.kt index b09c5ea174..90839aaf61 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartDMAction.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartDMAction.kt @@ -8,7 +8,7 @@ package io.element.android.features.startchat.impl import androidx.compose.runtime.MutableState -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import im.vector.app.features.analytics.plan.CreatedRoom import io.element.android.features.startchat.api.ConfirmingStartDmWithMatrixUser import io.element.android.features.startchat.api.StartDMAction @@ -20,10 +20,11 @@ import io.element.android.libraries.matrix.api.room.StartDMResult import io.element.android.libraries.matrix.api.room.startDM import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.services.analytics.api.AnalyticsService -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultStartDMAction @Inject constructor( +@Inject +class DefaultStartDMAction( private val matrixClient: MatrixClient, private val analyticsService: AnalyticsService, ) : StartDMAction { diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/StartChatFlowNode.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/StartChatFlowNode.kt index a312b6fa84..337a70b02a 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/StartChatFlowNode.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/StartChatFlowNode.kt @@ -18,8 +18,8 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.createroom.api.CreateRoomEntryPoint import io.element.android.features.startchat.DefaultStartChatNavigator @@ -36,7 +36,8 @@ import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class StartChatFlowNode @AssistedInject constructor( +@Inject +class StartChatFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val createRoomEntryPoint: CreateRoomEntryPoint, diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/joinbyaddress/JoinRoomByAddressNode.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/joinbyaddress/JoinRoomByAddressNode.kt index 67dba8b46e..efaae3e345 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/joinbyaddress/JoinRoomByAddressNode.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/joinbyaddress/JoinRoomByAddressNode.kt @@ -13,14 +13,15 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.startchat.StartChatNavigator import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class JoinRoomByAddressNode @AssistedInject constructor( +@Inject +class JoinRoomByAddressNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: JoinRoomByAddressPresenter.Factory, diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/joinbyaddress/JoinRoomByAddressPresenter.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/joinbyaddress/JoinRoomByAddressPresenter.kt index 4e1f9f9ab0..42bd54e9f2 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/joinbyaddress/JoinRoomByAddressPresenter.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/joinbyaddress/JoinRoomByAddressPresenter.kt @@ -15,9 +15,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.startchat.StartChatNavigator import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.data.tryOrNull @@ -31,7 +31,8 @@ import kotlin.time.Duration.Companion.seconds private const val ADDRESS_RESOLVE_TIMEOUT_IN_SECONDS = 10 -class JoinRoomByAddressPresenter @AssistedInject constructor( +@Inject +class JoinRoomByAddressPresenter( @Assisted private val navigator: StartChatNavigator, private val client: MatrixClient, private val roomAliasHelper: RoomAliasHelper, diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatNode.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatNode.kt index 9b9a1ec0dc..f6037a8346 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatNode.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatNode.kt @@ -16,8 +16,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.startchat.StartChatNavigator @@ -27,7 +27,8 @@ import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(SessionScope::class) -class StartChatNode @AssistedInject constructor( +@Inject +class StartChatNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: StartChatPresenter, diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatPresenter.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatPresenter.kt index 9f7bea5c68..22cacaa42c 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatPresenter.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatPresenter.kt @@ -27,9 +27,10 @@ import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.usersearch.api.UserRepository import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class StartChatPresenter @Inject constructor( +@Inject +class StartChatPresenter( presenterFactory: UserListPresenter.Factory, userRepository: UserRepository, userListDataStore: UserListDataStore, diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/DefaultUserListPresenter.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/DefaultUserListPresenter.kt index c964b18441..1b0caad505 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/DefaultUserListPresenter.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/DefaultUserListPresenter.kt @@ -15,10 +15,10 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.designsystem.theme.components.SearchBarResultState import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient @@ -31,7 +31,8 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -class DefaultUserListPresenter @AssistedInject constructor( +@Inject +class DefaultUserListPresenter( @Assisted val args: UserListPresenterArgs, @Assisted val userRepository: UserRepository, @Assisted val userListDataStore: UserListDataStore, diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt index 64048d7e86..cba87d1a9d 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt @@ -10,9 +10,10 @@ package io.element.android.features.startchat.impl.userlist import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class UserListDataStore @Inject constructor() { +@Inject +class UserListDataStore() { private val _selectedUsers: MutableStateFlow> = MutableStateFlow(emptyList()) fun selectUser(user: MatrixUser) { diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt index 07cd908304..39f15ff33f 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.userprofile.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.userprofile.api.UserProfileEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultUserProfileEntryPoint @Inject constructor() : UserProfileEntryPoint { +@Inject +class DefaultUserProfileEntryPoint() : UserProfileEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): UserProfileEntryPoint.NodeBuilder { return object : UserProfileEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfilePresenterFactory.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfilePresenterFactory.kt index f95670d4fa..4ff4b0c786 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfilePresenterFactory.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfilePresenterFactory.kt @@ -7,17 +7,18 @@ package io.element.android.features.userprofile.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.userprofile.api.UserProfilePresenterFactory import io.element.android.features.userprofile.api.UserProfileState import io.element.android.features.userprofile.impl.root.UserProfilePresenter import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.UserId -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultUserProfilePresenterFactory @Inject constructor( +@Inject +class DefaultUserProfilePresenterFactory( private val factory: UserProfilePresenter.Factory, ) : UserProfilePresenterFactory { override fun create(userId: UserId): Presenter = factory.create(userId) diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt index e67a00a8b1..d1b8e87f61 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/UserProfileFlowNode.kt @@ -17,8 +17,8 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.call.api.CallType import io.element.android.features.call.api.ElementCallEntryPoint @@ -40,7 +40,8 @@ import io.element.android.libraries.mediaviewer.api.MediaViewerEntryPoint import kotlinx.parcelize.Parcelize @ContributesNode(SessionScope::class) -class UserProfileFlowNode @AssistedInject constructor( +@Inject +class UserProfileFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val elementCallEntryPoint: ElementCallEntryPoint, diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt index f10fd48a04..e92018ae22 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfileNode.kt @@ -14,8 +14,8 @@ import com.bumble.appyx.core.lifecycle.subscribe import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.features.userprofile.shared.UserProfileNodeHelper @@ -29,7 +29,8 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkBuilder import io.element.android.services.analytics.api.AnalyticsService @ContributesNode(SessionScope::class) -class UserProfileNode @AssistedInject constructor( +@Inject +class UserProfileNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val analyticsService: AnalyticsService, diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt index b7fae6082b..77786ca096 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/root/UserProfilePresenter.kt @@ -17,9 +17,9 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.enterprise.api.SessionEnterpriseService import io.element.android.features.startchat.api.StartDMAction import io.element.android.features.userprofile.api.UserProfileEvents @@ -41,7 +41,8 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -class UserProfilePresenter @AssistedInject constructor( +@Inject +class UserProfilePresenter( @Assisted private val userId: UserId, private val client: MatrixClient, private val startDMAction: StartDMAction, diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt index c08319006c..1f508fa28b 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.verifysession.impl.incoming import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.verifysession.api.IncomingVerificationEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultIncomingVerificationEntryPoint @Inject constructor() : IncomingVerificationEntryPoint { +@Inject +class DefaultIncomingVerificationEntryPoint() : IncomingVerificationEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): IncomingVerificationEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationNode.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationNode.kt index 802eadb13a..a037c31289 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationNode.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationNode.kt @@ -13,15 +13,16 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.verifysession.api.IncomingVerificationEntryPoint import io.element.android.libraries.architecture.inputs import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class IncomingVerificationNode @AssistedInject constructor( +@Inject +class IncomingVerificationNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: IncomingVerificationPresenter.Factory, diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationPresenter.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationPresenter.kt index 66a2b2b2cd..aab6ff0329 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationPresenter.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationPresenter.kt @@ -17,9 +17,9 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import com.freeletics.flowredux.compose.rememberStateAndDispatch -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.verifysession.impl.incoming.IncomingVerificationState.Step import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.dateformatter.api.DateFormatter @@ -38,7 +38,8 @@ import timber.log.Timber import io.element.android.features.verifysession.impl.incoming.IncomingVerificationStateMachine.Event as StateMachineEvent import io.element.android.features.verifysession.impl.incoming.IncomingVerificationStateMachine.State as StateMachineState -class IncomingVerificationPresenter @AssistedInject constructor( +@Inject +class IncomingVerificationPresenter( @Assisted private val verificationRequest: VerificationRequest.Incoming, @Assisted private val navigator: IncomingVerificationNavigator, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateMachine.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateMachine.kt index 9ff9f50cd8..ab20d0e8fb 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateMachine.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateMachine.kt @@ -15,10 +15,11 @@ import io.element.android.features.verifysession.impl.util.logReceivedEvents import io.element.android.libraries.matrix.api.verification.SessionVerificationData import io.element.android.libraries.matrix.api.verification.SessionVerificationService import kotlinx.coroutines.ExperimentalCoroutinesApi -import javax.inject.Inject +import dev.zacsweers.metro.Inject import com.freeletics.flowredux.dsl.State as MachineState -class IncomingVerificationStateMachine @Inject constructor( +@Inject +class IncomingVerificationStateMachine( private val sessionVerificationService: SessionVerificationService, ) : FlowReduxStateMachine( initialState = State.Initial(isCancelled = false) diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt index 8ab29ce9f2..f503d3f40a 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.features.verifysession.impl.outgoing import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.verifysession.api.OutgoingVerificationEntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultOutgoingVerificationEntryPoint @Inject constructor() : OutgoingVerificationEntryPoint { +@Inject +class DefaultOutgoingVerificationEntryPoint() : OutgoingVerificationEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): OutgoingVerificationEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationNode.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationNode.kt index 4691a1d23f..38c7dd7599 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationNode.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationNode.kt @@ -13,37 +13,38 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.verifysession.api.OutgoingVerificationEntryPoint import io.element.android.libraries.architecture.inputs import io.element.android.libraries.di.SessionScope @ContributesNode(SessionScope::class) -class OutgoingVerificationNode @AssistedInject constructor( +@Inject +class OutgoingVerificationNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, - presenterFactory: OutgoingVerificationPresenter.Factory, +// presenterFactory: OutgoingVerificationPresenter.Factory, ) : Node(buildContext, plugins = plugins) { private val callback = plugins().first() private val inputs = inputs() - private val presenter = presenterFactory.create( - showDeviceVerifiedScreen = inputs.showDeviceVerifiedScreen, - verificationRequest = inputs.verificationRequest, - ) +// private val presenter = presenterFactory.create( +// showDeviceVerifiedScreen = inputs.showDeviceVerifiedScreen, +// verificationRequest = inputs.verificationRequest, +// ) @Composable override fun View(modifier: Modifier) { - val state = presenter.present() - OutgoingVerificationView( - state = state, - modifier = modifier, - onLearnMoreClick = callback::onLearnMoreAboutEncryption, - onFinish = callback::onDone, - onBack = callback::onBack, - ) +// val state = presenter.present() +// OutgoingVerificationView( +// state = state, +// modifier = modifier, +// onLearnMoreClick = callback::onLearnMoreAboutEncryption, +// onFinish = callback::onDone, +// onBack = callback::onBack, +// ) } } diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt index 8185681090..78616d1bcc 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt @@ -16,9 +16,9 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import com.freeletics.flowredux.compose.rememberStateAndDispatch -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.encryption.EncryptionService @@ -34,146 +34,147 @@ import timber.log.Timber import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationStateMachine.Event as StateMachineEvent import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationStateMachine.State as StateMachineState -class OutgoingVerificationPresenter @AssistedInject constructor( - @Assisted private val showDeviceVerifiedScreen: Boolean, - @Assisted private val verificationRequest: VerificationRequest.Outgoing, - private val sessionVerificationService: SessionVerificationService, - private val encryptionService: EncryptionService, -) : Presenter { - @AssistedFactory - interface Factory { - fun create( - verificationRequest: VerificationRequest.Outgoing, - showDeviceVerifiedScreen: Boolean, - ): OutgoingVerificationPresenter - } - - private val stateMachine = OutgoingVerificationStateMachine( - sessionVerificationService = sessionVerificationService, - encryptionService = encryptionService, - ) - - @Composable - override fun present(): OutgoingVerificationState { - val stateAndDispatch = stateMachine.rememberStateAndDispatch() - - val sessionVerifiedStatus by sessionVerificationService.sessionVerifiedStatus.collectAsState() - val step by remember { - derivedStateOf { - when (verificationRequest) { - is VerificationRequest.Outgoing.CurrentSession -> { - when (sessionVerifiedStatus) { - SessionVerifiedStatus.Unknown -> OutgoingVerificationState.Step.Loading - SessionVerifiedStatus.NotVerified -> { - stateAndDispatch.state.value.toVerificationStep() - } - SessionVerifiedStatus.Verified -> { - if (stateAndDispatch.state.value != StateMachineState.Initial || showDeviceVerifiedScreen) { - // The user has verified the session, we need to show the success screen - OutgoingVerificationState.Step.Completed - } else { - // Automatic verification, which can happen on freshly created account, in this case, skip the screen - OutgoingVerificationState.Step.Exit - } - } - } - } - is VerificationRequest.Outgoing.User -> stateAndDispatch.state.value.toVerificationStep() - } - } - } - - // Start this after observing state machine - LaunchedEffect(Unit) { - // Force reset, just in case the service was left in a broken state - sessionVerificationService.reset(cancelAnyPendingVerificationAttempt = true) - - observeVerificationService() - } - - fun handleEvents(event: OutgoingVerificationViewEvents) { - Timber.d("Verification user action: ${event::class.simpleName}") - when (event) { - // Just relay the event to the state machine - OutgoingVerificationViewEvents.RequestVerification -> StateMachineEvent.RequestVerification(verificationRequest) - OutgoingVerificationViewEvents.StartSasVerification -> StateMachineEvent.StartSasVerification - OutgoingVerificationViewEvents.ConfirmVerification -> StateMachineEvent.AcceptChallenge - OutgoingVerificationViewEvents.DeclineVerification -> StateMachineEvent.DeclineChallenge - OutgoingVerificationViewEvents.Cancel -> StateMachineEvent.Cancel - OutgoingVerificationViewEvents.Reset -> StateMachineEvent.Reset - }.let { stateMachineEvent -> - stateAndDispatch.dispatchAction(stateMachineEvent) - } - } - return OutgoingVerificationState( - step = step, - request = verificationRequest, - eventSink = ::handleEvents, - ) - } - - private fun StateMachineState?.toVerificationStep(): OutgoingVerificationState.Step = - when (val machineState = this) { - StateMachineState.Initial, null -> { - OutgoingVerificationState.Step.Initial - } - is StateMachineState.RequestingVerification, - is StateMachineState.StartingSasVerification, - StateMachineState.SasVerificationStarted -> { - OutgoingVerificationState.Step.AwaitingOtherDeviceResponse - } - - StateMachineState.VerificationRequestAccepted -> { - OutgoingVerificationState.Step.Ready - } - - is StateMachineState.Canceled -> { - OutgoingVerificationState.Step.Canceled - } - - is StateMachineState.Verifying -> { - val async = when (machineState) { - is StateMachineState.Verifying.Replying -> AsyncData.Loading() - else -> AsyncData.Uninitialized - } - OutgoingVerificationState.Step.Verifying(machineState.data, async) - } - - StateMachineState.Completed -> { - OutgoingVerificationState.Step.Completed - } - - StateMachineState.Exit -> { - OutgoingVerificationState.Step.Exit - } - } - - private fun CoroutineScope.observeVerificationService() { - sessionVerificationService.verificationFlowState - .onEach { Timber.d("Verification flow state: ${it::class.simpleName}") } - .onEach { verificationAttemptState -> - when (verificationAttemptState) { - VerificationFlowState.Initial -> stateMachine.dispatch(StateMachineEvent.Reset) - VerificationFlowState.DidAcceptVerificationRequest -> { - stateMachine.dispatch(StateMachineEvent.DidAcceptVerificationRequest) - } - VerificationFlowState.DidStartSasVerification -> { - stateMachine.dispatch(StateMachineEvent.DidStartSasVerification) - } - is VerificationFlowState.DidReceiveVerificationData -> { - stateMachine.dispatch(StateMachineEvent.DidReceiveChallenge(verificationAttemptState.data)) - } - VerificationFlowState.DidFinish -> { - stateMachine.dispatch(StateMachineEvent.DidAcceptChallenge) - } - VerificationFlowState.DidCancel -> { - stateMachine.dispatch(StateMachineEvent.DidCancel) - } - VerificationFlowState.DidFail -> { - stateMachine.dispatch(StateMachineEvent.DidFail) - } - } - } - .launchIn(this) - } -} +//@Inject +//class OutgoingVerificationPresenter( +// @Assisted private val showDeviceVerifiedScreen: Boolean, +// @Assisted private val verificationRequest: VerificationRequest.Outgoing, +// private val sessionVerificationService: SessionVerificationService, +// private val encryptionService: EncryptionService, +//) : Presenter { +// @AssistedFactory +// interface Factory { +// fun create( +// verificationRequest: VerificationRequest.Outgoing, +// showDeviceVerifiedScreen: Boolean, +// ): OutgoingVerificationPresenter +// } +// +// private val stateMachine = OutgoingVerificationStateMachine( +// sessionVerificationService = sessionVerificationService, +// encryptionService = encryptionService, +// ) +// +// @Composable +// override fun present(): OutgoingVerificationState { +// val stateAndDispatch = stateMachine.rememberStateAndDispatch() +// +// val sessionVerifiedStatus by sessionVerificationService.sessionVerifiedStatus.collectAsState() +// val step by remember { +// derivedStateOf { +// when (verificationRequest) { +// is VerificationRequest.Outgoing.CurrentSession -> { +// when (sessionVerifiedStatus) { +// SessionVerifiedStatus.Unknown -> OutgoingVerificationState.Step.Loading +// SessionVerifiedStatus.NotVerified -> { +// stateAndDispatch.state.value.toVerificationStep() +// } +// SessionVerifiedStatus.Verified -> { +// if (stateAndDispatch.state.value != StateMachineState.Initial || showDeviceVerifiedScreen) { +// // The user has verified the session, we need to show the success screen +// OutgoingVerificationState.Step.Completed +// } else { +// // Automatic verification, which can happen on freshly created account, in this case, skip the screen +// OutgoingVerificationState.Step.Exit +// } +// } +// } +// } +// is VerificationRequest.Outgoing.User -> stateAndDispatch.state.value.toVerificationStep() +// } +// } +// } +// +// // Start this after observing state machine +// LaunchedEffect(Unit) { +// // Force reset, just in case the service was left in a broken state +// sessionVerificationService.reset(cancelAnyPendingVerificationAttempt = true) +// +// observeVerificationService() +// } +// +// fun handleEvents(event: OutgoingVerificationViewEvents) { +// Timber.d("Verification user action: ${event::class.simpleName}") +// when (event) { +// // Just relay the event to the state machine +// OutgoingVerificationViewEvents.RequestVerification -> StateMachineEvent.RequestVerification(verificationRequest) +// OutgoingVerificationViewEvents.StartSasVerification -> StateMachineEvent.StartSasVerification +// OutgoingVerificationViewEvents.ConfirmVerification -> StateMachineEvent.AcceptChallenge +// OutgoingVerificationViewEvents.DeclineVerification -> StateMachineEvent.DeclineChallenge +// OutgoingVerificationViewEvents.Cancel -> StateMachineEvent.Cancel +// OutgoingVerificationViewEvents.Reset -> StateMachineEvent.Reset +// }.let { stateMachineEvent -> +// stateAndDispatch.dispatchAction(stateMachineEvent) +// } +// } +// return OutgoingVerificationState( +// step = step, +// request = verificationRequest, +// eventSink = ::handleEvents, +// ) +// } +// +// private fun StateMachineState?.toVerificationStep(): OutgoingVerificationState.Step = +// when (val machineState = this) { +// StateMachineState.Initial, null -> { +// OutgoingVerificationState.Step.Initial +// } +// is StateMachineState.RequestingVerification, +// is StateMachineState.StartingSasVerification, +// StateMachineState.SasVerificationStarted -> { +// OutgoingVerificationState.Step.AwaitingOtherDeviceResponse +// } +// +// StateMachineState.VerificationRequestAccepted -> { +// OutgoingVerificationState.Step.Ready +// } +// +// is StateMachineState.Canceled -> { +// OutgoingVerificationState.Step.Canceled +// } +// +// is StateMachineState.Verifying -> { +// val async = when (machineState) { +// is StateMachineState.Verifying.Replying -> AsyncData.Loading() +// else -> AsyncData.Uninitialized +// } +// OutgoingVerificationState.Step.Verifying(machineState.data, async) +// } +// +// StateMachineState.Completed -> { +// OutgoingVerificationState.Step.Completed +// } +// +// StateMachineState.Exit -> { +// OutgoingVerificationState.Step.Exit +// } +// } +// +// private fun CoroutineScope.observeVerificationService() { +// sessionVerificationService.verificationFlowState +// .onEach { Timber.d("Verification flow state: ${it::class.simpleName}") } +// .onEach { verificationAttemptState -> +// when (verificationAttemptState) { +// VerificationFlowState.Initial -> stateMachine.dispatch(StateMachineEvent.Reset) +// VerificationFlowState.DidAcceptVerificationRequest -> { +// stateMachine.dispatch(StateMachineEvent.DidAcceptVerificationRequest) +// } +// VerificationFlowState.DidStartSasVerification -> { +// stateMachine.dispatch(StateMachineEvent.DidStartSasVerification) +// } +// is VerificationFlowState.DidReceiveVerificationData -> { +// stateMachine.dispatch(StateMachineEvent.DidReceiveChallenge(verificationAttemptState.data)) +// } +// VerificationFlowState.DidFinish -> { +// stateMachine.dispatch(StateMachineEvent.DidAcceptChallenge) +// } +// VerificationFlowState.DidCancel -> { +// stateMachine.dispatch(StateMachineEvent.DidCancel) +// } +// VerificationFlowState.DidFail -> { +// stateMachine.dispatch(StateMachineEvent.DidFail) +// } +// } +// } +// .launchIn(this) +// } +//} diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt index 55743f54cc..208af2bb14 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt @@ -9,16 +9,17 @@ package io.element.android.features.viewfolder.impl import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.viewfolder.api.TextFileViewer import io.element.android.features.viewfolder.impl.file.ColorationMode import io.element.android.features.viewfolder.impl.file.FileContent -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.collections.immutable.ImmutableList -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultTextFileViewer @Inject constructor() : TextFileViewer { +@Inject +class DefaultTextFileViewer() : TextFileViewer { @Composable override fun Render( lines: ImmutableList, diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt index 47aaabfac6..b0ebc51f7d 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt @@ -10,15 +10,16 @@ package io.element.android.features.viewfolder.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.viewfolder.api.ViewFolderEntryPoint import io.element.android.features.viewfolder.impl.root.ViewFolderRootNode import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultViewFolderEntryPoint @Inject constructor() : ViewFolderEntryPoint { +@Inject +class DefaultViewFolderEntryPoint() : ViewFolderEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): ViewFolderEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileContentReader.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileContentReader.kt index e94bde4a53..bbbb228aa7 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileContentReader.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileContentReader.kt @@ -7,20 +7,21 @@ package io.element.android.features.viewfolder.impl.file -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.coroutines.withContext import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface FileContentReader { suspend fun getLines(path: String): Result> } @ContributesBinding(AppScope::class) -class DefaultFileContentReader @Inject constructor( +@Inject +class DefaultFileContentReader( private val dispatchers: CoroutineDispatchers, ) : FileContentReader { override suspend fun getLines(path: String): Result> = withContext(dispatchers.io) { diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileSave.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileSave.kt index 78648c6738..3ce5134f94 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileSave.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileSave.kt @@ -13,18 +13,18 @@ import android.os.Build import android.os.Environment import android.provider.MediaStore import androidx.annotation.RequiresApi -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.system.toast import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.mimetype.MimeTypes -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File import java.io.FileOutputStream -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface FileSave { suspend fun save( @@ -33,7 +33,8 @@ interface FileSave { } @ContributesBinding(AppScope::class) -class DefaultFileSave @Inject constructor( +@Inject +class DefaultFileSave( @ApplicationContext private val context: Context, private val dispatchers: CoroutineDispatchers, ) : FileSave { diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileShare.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileShare.kt index 471f2df5d4..e6025dc1b5 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileShare.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileShare.kt @@ -11,17 +11,17 @@ import android.content.Context import android.content.Intent import android.net.Uri import androidx.core.content.FileProvider -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.mimetype.MimeTypes -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface FileShare { suspend fun share( @@ -30,7 +30,8 @@ interface FileShare { } @ContributesBinding(AppScope::class) -class DefaultFileShare @Inject constructor( +@Inject +class DefaultFileShare( @ApplicationContext private val context: Context, private val dispatchers: CoroutineDispatchers, private val buildMeta: BuildMeta, diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileNode.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileNode.kt index 242fedebf5..58ccdc2bd5 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileNode.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileNode.kt @@ -13,15 +13,16 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class ViewFileNode @AssistedInject constructor( +@Inject +class ViewFileNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: ViewFilePresenter.Factory, diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFilePresenter.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFilePresenter.kt index 12cbeda65c..e22ae371cb 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFilePresenter.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFilePresenter.kt @@ -14,15 +14,16 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -class ViewFilePresenter @AssistedInject constructor( +@Inject +class ViewFilePresenter( @Assisted("path") val path: String, @Assisted("name") val name: String, private val fileContentReader: FileContentReader, diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/FolderExplorer.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/FolderExplorer.kt index 403a0ac49c..ec60c0e611 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/FolderExplorer.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/FolderExplorer.kt @@ -7,21 +7,22 @@ package io.element.android.features.viewfolder.impl.folder -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.viewfolder.impl.model.Item import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.coroutines.withContext import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface FolderExplorer { suspend fun getItems(path: String): List } @ContributesBinding(AppScope::class) -class DefaultFolderExplorer @Inject constructor( +@Inject +class DefaultFolderExplorer( private val fileSizeFormatter: FileSizeFormatter, private val dispatchers: CoroutineDispatchers, ) : FolderExplorer { diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt index 600baf862d..5876213687 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt @@ -13,19 +13,20 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.viewfolder.impl.model.Item import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) -class ViewFolderNode @AssistedInject constructor( +@Inject +class ViewFolderNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, - presenterFactory: ViewFolderPresenter.Factory, +// presenterFactory: ViewFolderPresenter.Factory, ) : Node(buildContext, plugins = plugins) { data class Inputs( val canGoUp: Boolean, @@ -39,10 +40,10 @@ class ViewFolderNode @AssistedInject constructor( private val inputs: Inputs = inputs() - private val presenter = presenterFactory.create( - canGoUp = inputs.canGoUp, - path = inputs.path, - ) +// private val presenter = presenterFactory.create( +// canGoUp = inputs.canGoUp, +// path = inputs.path, +// ) private fun onBackClick() { plugins().forEach { it.onBackClick() } @@ -54,12 +55,12 @@ class ViewFolderNode @AssistedInject constructor( @Composable override fun View(modifier: Modifier) { - val state = presenter.present() - ViewFolderView( - state = state, - modifier = modifier, - onNavigateTo = ::onNavigateTo, - onBackClick = ::onBackClick, - ) +// val state = presenter.present() +// ViewFolderView( +// state = state, +// modifier = modifier, +// onNavigateTo = ::onNavigateTo, +// onBackClick = ::onBackClick, +// ) } } diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt index c303b0e612..473c812e32 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt @@ -13,35 +13,36 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.features.viewfolder.impl.model.Item import io.element.android.libraries.architecture.Presenter import kotlinx.collections.immutable.toImmutableList -class ViewFolderPresenter @AssistedInject constructor( - @Assisted val canGoUp: Boolean, - @Assisted val path: String, - private val folderExplorer: FolderExplorer, -) : Presenter { - @AssistedFactory - interface Factory { - fun create(canGoUp: Boolean, path: String): ViewFolderPresenter - } - - @Composable - override fun present(): ViewFolderState { - var content by remember { mutableStateOf(emptyList()) } - LaunchedEffect(Unit) { - content = buildList { - if (canGoUp) add(Item.Parent) - addAll(folderExplorer.getItems(path)) - } - } - return ViewFolderState( - path = path, - content = content.toImmutableList(), - ) - } -} +//@Inject +//class ViewFolderPresenter( +// @Assisted val canGoUp: Boolean, +// @Assisted val path: String, +// private val folderExplorer: FolderExplorer, +//) : Presenter { +// @AssistedFactory +// interface Factory { +// fun create(canGoUp: Boolean, path: String): ViewFolderPresenter +// } +// +// @Composable +// override fun present(): ViewFolderState { +// var content by remember { mutableStateOf(emptyList()) } +// LaunchedEffect(Unit) { +// content = buildList { +// if (canGoUp) add(Item.Parent) +// addAll(folderExplorer.getItems(path)) +// } +// } +// return ViewFolderState( +// path = path, +// content = content.toImmutableList(), +// ) +// } +//} diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/root/ViewFolderRootNode.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/root/ViewFolderRootNode.kt index 81084ead2a..7563c10e41 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/root/ViewFolderRootNode.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/root/ViewFolderRootNode.kt @@ -17,8 +17,8 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.viewfolder.api.ViewFolderEntryPoint import io.element.android.features.viewfolder.impl.file.ViewFileNode @@ -29,11 +29,12 @@ import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.parcelize.Parcelize @ContributesNode(AppScope::class) -class ViewFolderRootNode @AssistedInject constructor( +@Inject +class ViewFolderRootNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : BaseFlowNode( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 59a8307461..6c2b1c3b6b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -52,6 +52,7 @@ dependencyAnalysis = "2.19.0" # DI dagger = "2.57.1" anvil = "0.4.1" +metro = "0.7.0-SNAPSHOT" # Auto service autoservice = "1.1.1" @@ -68,6 +69,7 @@ compose_compiler_plugin = { module = "org.jetbrains.kotlin:compose-compiler-grad android_desugar = "com.android.tools:desugar_jdk_libs:2.1.5" anvil_gradle_plugin = { module = "dev.zacsweers.anvil:gradle-plugin", version.ref = "anvil" } kotlin_gradle_plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } +metro_gradle_plugin = { module = "dev.zacsweers.metro:gradle-plugin", version.ref = "metro" } kotlinpoet = { module = "com.squareup:kotlinpoet", version.ref = "kotlinpoet" } kotlinpoet-ksp = { module = "com.squareup:kotlinpoet-ksp", version.ref = "kotlinpoet" } kover_gradle_plugin = { module = "org.jetbrains.kotlinx:kover-gradle-plugin", version.ref = "kover" } @@ -211,6 +213,8 @@ sigpwned_emoji4j = "com.sigpwned:emoji4j-core:16.0.0" inject = "javax.inject:javax.inject:1" dagger = { module = "com.google.dagger:dagger", version.ref = "dagger" } dagger_compiler = { module = "com.google.dagger:dagger-compiler", version.ref = "dagger" } +metro_runtime = { module = "dev.zacsweers.metro:runtime", version.ref = "metro" } +metro_compiler = { module = "dev.zacsweers.metro:compiler", version.ref = "metro" } anvil_compiler_api = { module = "dev.zacsweers.anvil:compiler-api", version.ref = "anvil" } anvil_compiler_utils = { module = "dev.zacsweers.anvil:compiler-utils", version.ref = "anvil" } @@ -235,6 +239,7 @@ kotlin_serialization = { id = "org.jetbrains.kotlin.plugin.serialization", versi kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } anvil = { id = "dev.zacsweers.anvil", version.ref = "anvil" } +metro = { id = "dev.zacsweers.metro", version.ref = "metro" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } ktlint = "org.jlleitschuh.gradle.ktlint:13.1.0" dependencygraph = "com.savvasdalkitsis.module-dependency-graph:0.12" diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/clipboard/AndroidClipboardHelper.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/clipboard/AndroidClipboardHelper.kt index 80f4b47d7c..7cf81f5cc1 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/clipboard/AndroidClipboardHelper.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/clipboard/AndroidClipboardHelper.kt @@ -11,15 +11,16 @@ import android.content.ClipData import android.content.ClipboardManager import android.content.Context import androidx.core.content.getSystemService -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn -import javax.inject.Inject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class AndroidClipboardHelper @Inject constructor( +@Inject +class AndroidClipboardHelper( @ApplicationContext private val context: Context, ) : ClipboardHelper { private val clipboardManager = requireNotNull(context.getSystemService()) diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/TemporaryUriDeleter.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/TemporaryUriDeleter.kt index 77c4dc3547..e85bcff21d 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/TemporaryUriDeleter.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/TemporaryUriDeleter.kt @@ -9,11 +9,11 @@ package io.element.android.libraries.androidutils.file import android.content.Context import android.net.Uri -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber -import javax.inject.Inject interface TemporaryUriDeleter { /** @@ -23,7 +23,8 @@ interface TemporaryUriDeleter { } @ContributesBinding(AppScope::class) -class DefaultTemporaryUriDeleter @Inject constructor( +@Inject +class DefaultTemporaryUriDeleter( @ApplicationContext private val context: Context, ) : TemporaryUriDeleter { private val baseCacheUri = "content://${context.packageName}.fileprovider/cache" diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/filesize/AndroidFileSizeFormatter.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/filesize/AndroidFileSizeFormatter.kt index 4c1bf4657a..cff1a5bd78 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/filesize/AndroidFileSizeFormatter.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/filesize/AndroidFileSizeFormatter.kt @@ -10,14 +10,15 @@ package io.element.android.libraries.androidutils.filesize import android.content.Context import android.os.Build import android.text.format.Formatter -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider -import javax.inject.Inject @ContributesBinding(AppScope::class) -class AndroidFileSizeFormatter @Inject constructor( +@Inject +class AndroidFileSizeFormatter( @ApplicationContext private val context: Context, private val sdkIntProvider: BuildVersionSdkIntProvider, ) : FileSizeFormatter { diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/system/DateTimeObserver.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/system/DateTimeObserver.kt index 7cae54e1ba..da81990688 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/system/DateTimeObserver.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/system/DateTimeObserver.kt @@ -11,15 +11,15 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.androidutils.system.DateTimeObserver.Event -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import java.time.Instant -import javax.inject.Inject interface DateTimeObserver { val changes: Flow @@ -32,7 +32,8 @@ interface DateTimeObserver { @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class DefaultDateTimeObserver @Inject constructor( +@Inject +class DefaultDateTimeObserver( @ApplicationContext context: Context ) : DateTimeObserver { private val dateTimeReceiver = object : BroadcastReceiver() { diff --git a/libraries/architecture/build.gradle.kts b/libraries/architecture/build.gradle.kts index c50cf39122..100722c32a 100644 --- a/libraries/architecture/build.gradle.kts +++ b/libraries/architecture/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2023, 2024 New Vector Ltd. * @@ -13,10 +15,12 @@ android { namespace = "io.element.android.libraries.architecture" } +setupAnvil() + dependencies { api(projects.libraries.di) api(projects.libraries.core) - api(libs.dagger) + api(libs.metro.runtime) api(libs.appyx.core) api(libs.androidx.lifecycle.runtime) api(libs.molecule.runtime) diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt index 73d2b0a064..f55c628381 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt @@ -11,6 +11,11 @@ import android.content.Context import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Multibinds +import io.element.android.libraries.di.AppScope +import kotlin.reflect.KClass inline fun Node.createNode( buildContext: BuildContext, @@ -32,11 +37,11 @@ inline fun NodeFactoriesBindings.createNode( buildContext: BuildContext, plugins: List = emptyList() ): N { - val nodeClass = N::class.java + val nodeClass = N::class val nodeFactoryMap = nodeFactories() // Note to developers: If you got the error below, make sure to build again after // clearing the cache (sometimes several times) to let Dagger generate the NodeFactory. - val nodeFactory = nodeFactoryMap[nodeClass] ?: error("Cannot find NodeFactory for ${nodeClass.name}.") + val nodeFactory = nodeFactoryMap[nodeClass] ?: error("Cannot find NodeFactory for ${nodeClass.java.name}.") @Suppress("UNCHECKED_CAST") val castedNodeFactory = nodeFactory as? AssistedNodeFactory @@ -44,6 +49,8 @@ inline fun NodeFactoriesBindings.createNode( return node as N } +//@BindingContainer interface NodeFactoriesBindings { - fun nodeFactories(): Map, AssistedNodeFactory<*>> + @Multibinds + fun nodeFactories(): Map, AssistedNodeFactory<*>> } diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeKey.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeKey.kt index bb7dde6bd3..b5ba343b4e 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeKey.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeKey.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.architecture import com.bumble.appyx.core.node.Node -import dagger.MapKey +import dev.zacsweers.metro.MapKey import kotlin.reflect.KClass @Retention(AnnotationRetention.RUNTIME) -@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CLASS) +@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS) @MapKey annotation class NodeKey(val value: KClass) diff --git a/libraries/audio/impl/src/main/kotlin/io/element/android/libraries/audio/impl/DefaultAudioFocus.kt b/libraries/audio/impl/src/main/kotlin/io/element/android/libraries/audio/impl/DefaultAudioFocus.kt index 057339d60c..41183fa58f 100644 --- a/libraries/audio/impl/src/main/kotlin/io/element/android/libraries/audio/impl/DefaultAudioFocus.kt +++ b/libraries/audio/impl/src/main/kotlin/io/element/android/libraries/audio/impl/DefaultAudioFocus.kt @@ -13,15 +13,16 @@ import android.media.AudioFocusRequest import android.media.AudioManager import android.os.Build import androidx.core.content.getSystemService -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.audio.api.AudioFocus import io.element.android.libraries.audio.api.AudioFocusRequester -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext @ContributesBinding(AppScope::class) -class DefaultAudioFocus @Inject constructor( +@Inject +class DefaultAudioFocus( @ApplicationContext private val context: Context, ) : AudioFocus { private val audioManager = requireNotNull(context.getSystemService()) diff --git a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt index 19f38f29e1..dda43f4b08 100644 --- a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt +++ b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt @@ -7,21 +7,22 @@ package io.element.android.libraries.cryptography.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.cryptography.api.AESEncryptionSpecs import io.element.android.libraries.cryptography.api.EncryptionDecryptionService import io.element.android.libraries.cryptography.api.EncryptionResult -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import javax.crypto.Cipher import javax.crypto.SecretKey import javax.crypto.spec.GCMParameterSpec -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Default implementation of [EncryptionDecryptionService] using AES encryption. */ @ContributesBinding(AppScope::class) -class AESEncryptionDecryptionService @Inject constructor() : EncryptionDecryptionService { +@Inject +class AESEncryptionDecryptionService() : EncryptionDecryptionService { override fun createEncryptionCipher(key: SecretKey): Cipher { return Cipher.getInstance(AESEncryptionSpecs.CIPHER_TRANSFORMATION).apply { init(Cipher.ENCRYPT_MODE, key) 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/CryptographyModule.kt index ead85bf776..ac79d64b25 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/CryptographyModule.kt @@ -7,16 +7,16 @@ package io.element.android.libraries.cryptography.impl -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import dev.zacsweers.metro.AppScope import java.security.KeyStore internal const val ANDROID_KEYSTORE = "AndroidKeyStore" @ContributesTo(AppScope::class) -@Module +@BindingContainer object CryptographyModule { @Provides fun providesAndroidKeyStore(): KeyStore { 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 ab593a5528..c254f19f88 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 @@ -10,23 +10,24 @@ package io.element.android.libraries.cryptography.impl import android.annotation.SuppressLint import android.security.keystore.KeyGenParameterSpec import android.security.keystore.KeyProperties -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.cryptography.api.AESEncryptionSpecs import io.element.android.libraries.cryptography.api.SecretKeyRepository -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import timber.log.Timber import java.security.KeyStore import java.security.KeyStoreException import javax.crypto.KeyGenerator import javax.crypto.SecretKey -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * 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. */ @ContributesBinding(AppScope::class) -class KeyStoreSecretKeyRepository @Inject constructor( +@Inject +class KeyStoreSecretKeyRepository( private val keyStore: KeyStore, ) : SecretKeyRepository { // False positive lint issue diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterDay.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterDay.kt index bc8d8aedc0..336a549dd9 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterDay.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterDay.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.dateformatter.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.safeCapitalize -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface DateFormatterDay { fun format( @@ -20,7 +20,8 @@ interface DateFormatterDay { } @ContributesBinding(AppScope::class) -class DefaultDateFormatterDay @Inject constructor( +@Inject +class DefaultDateFormatterDay( private val localDateTimeProvider: LocalDateTimeProvider, private val dateFormatters: DateFormatters, ) : DateFormatterDay { diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterFull.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterFull.kt index 96b67c3227..0222c94f66 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterFull.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterFull.kt @@ -8,9 +8,10 @@ package io.element.android.libraries.dateformatter.impl import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class DateFormatterFull @Inject constructor( +@Inject +class DateFormatterFull( private val stringProvider: StringProvider, private val localDateTimeProvider: LocalDateTimeProvider, private val dateFormatters: DateFormatters, diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterMonth.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterMonth.kt index 4e7e46986c..362a0e96f5 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterMonth.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterMonth.kt @@ -9,9 +9,10 @@ package io.element.android.libraries.dateformatter.impl import io.element.android.libraries.core.extensions.safeCapitalize import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class DateFormatterMonth @Inject constructor( +@Inject +class DateFormatterMonth( private val stringProvider: StringProvider, private val localDateTimeProvider: LocalDateTimeProvider, private val dateFormatters: DateFormatters, diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterTime.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterTime.kt index 64dbe80415..de46c1f5c9 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterTime.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterTime.kt @@ -7,9 +7,10 @@ package io.element.android.libraries.dateformatter.impl -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class DateFormatterTime @Inject constructor( +@Inject +class DateFormatterTime( private val localDateTimeProvider: LocalDateTimeProvider, private val dateFormatters: DateFormatters, ) { diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterTimeOnly.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterTimeOnly.kt index 7d9d3883ae..b9e3091a32 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterTimeOnly.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterTimeOnly.kt @@ -7,9 +7,10 @@ package io.element.android.libraries.dateformatter.impl -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class DateFormatterTimeOnly @Inject constructor( +@Inject +class DateFormatterTimeOnly( private val localDateTimeProvider: LocalDateTimeProvider, private val dateFormatters: DateFormatters, ) { diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatters.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatters.kt index 9e5ffd6afe..06418c03aa 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatters.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatters.kt @@ -8,8 +8,8 @@ package io.element.android.libraries.dateformatter.impl import android.text.format.DateUtils -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import kotlinx.datetime.LocalDateTime import kotlinx.datetime.toInstant import kotlinx.datetime.toJavaLocalDate @@ -17,12 +17,13 @@ import kotlinx.datetime.toJavaLocalDateTime import timber.log.Timber import java.time.Period import java.util.Locale -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.math.absoluteValue import kotlin.time.Clock @SingleIn(AppScope::class) -class DateFormatters @Inject constructor( +@Inject +class DateFormatters( localeChangeObserver: LocaleChangeObserver, private val clock: Clock, private val timeZoneProvider: TimezoneProvider, diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DefaultDateFormatter.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DefaultDateFormatter.kt index fa1c058550..ed542b3609 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DefaultDateFormatter.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DefaultDateFormatter.kt @@ -7,14 +7,15 @@ package io.element.android.libraries.dateformatter.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.api.DateFormatterMode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultDateFormatter @Inject constructor( +@Inject +class DefaultDateFormatter( private val dateFormatterFull: DateFormatterFull, private val dateFormatterMonth: DateFormatterMonth, private val dateFormatterDay: DateFormatterDay, diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocalDateTimeProvider.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocalDateTimeProvider.kt index 20862fd68a..4573929f57 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocalDateTimeProvider.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocalDateTimeProvider.kt @@ -9,11 +9,12 @@ package io.element.android.libraries.dateformatter.impl import kotlinx.datetime.LocalDateTime import kotlinx.datetime.toLocalDateTime -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Clock import kotlin.time.Instant -class LocalDateTimeProvider @Inject constructor( +@Inject +class LocalDateTimeProvider( private val clock: Clock, private val timezoneProvider: TimezoneProvider, ) { diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocaleChangeObserver.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocaleChangeObserver.kt index d17507b778..1e8feb21ce 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocaleChangeObserver.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocaleChangeObserver.kt @@ -12,11 +12,11 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn -import javax.inject.Inject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.Inject fun interface LocaleChangeObserver { fun addListener(listener: LocaleChangeListener) @@ -28,7 +28,8 @@ interface LocaleChangeListener { @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultLocaleChangeObserver @Inject constructor( +@Inject +class DefaultLocaleChangeObserver( @ApplicationContext private val context: Context, ) : LocaleChangeObserver { init { 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/DateFormatterModule.kt index a7da8ea6ce..ce0818eea9 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/DateFormatterModule.kt @@ -7,16 +7,16 @@ package io.element.android.libraries.dateformatter.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.libraries.dateformatter.impl.TimezoneProvider -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.datetime.TimeZone import java.util.Locale import kotlin.time.Clock -@Module +@BindingContainer @ContributesTo(AppScope::class) object DateFormatterModule { @Provides diff --git a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeepLinkCreator.kt b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeepLinkCreator.kt index 371a0d21fb..76a9722f91 100644 --- a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeepLinkCreator.kt +++ b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeepLinkCreator.kt @@ -7,13 +7,13 @@ package io.element.android.libraries.deeplink.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.deeplink.api.DeepLinkCreator -import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.ThreadId -import javax.inject.Inject @ContributesBinding(AppScope::class) class DefaultDeepLinkCreator @Inject constructor() : DeepLinkCreator { diff --git a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeeplinkParser.kt b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeeplinkParser.kt index 84b17fc9aa..0c7d626985 100644 --- a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeeplinkParser.kt +++ b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeeplinkParser.kt @@ -9,17 +9,18 @@ package io.element.android.libraries.deeplink.impl import android.content.Intent import android.net.Uri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.deeplink.api.DeeplinkData import io.element.android.libraries.deeplink.api.DeeplinkParser -import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.ThreadId -import javax.inject.Inject @ContributesBinding(AppScope::class) -class DefaultDeeplinkParser @Inject constructor() : DeeplinkParser { +@Inject +class DefaultDeeplinkParser: DeeplinkParser { override fun getFromIntent(intent: Intent): DeeplinkData? { return intent .takeIf { it.action == Intent.ACTION_VIEW } diff --git a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/usecase/DefaultInviteFriendsUseCase.kt b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/usecase/DefaultInviteFriendsUseCase.kt index 8c24234cd8..045b199237 100644 --- a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/usecase/DefaultInviteFriendsUseCase.kt +++ b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/usecase/DefaultInviteFriendsUseCase.kt @@ -8,7 +8,8 @@ package io.element.android.libraries.deeplink.impl.usecase import android.app.Activity -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.system.startSharePlainTextIntent import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.deeplink.api.usecase.InviteFriendsUseCase @@ -18,11 +19,11 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkBuilder import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider import timber.log.Timber -import javax.inject.Inject import io.element.android.libraries.androidutils.R as AndroidUtilsR @ContributesBinding(SessionScope::class) -class DefaultInviteFriendsUseCase @Inject constructor( +@Inject +class DefaultInviteFriendsUseCase( private val stringProvider: StringProvider, private val matrixClient: MatrixClient, private val buildMeta: BuildMeta, diff --git a/libraries/di/build.gradle.kts b/libraries/di/build.gradle.kts index cd535b1e39..a7bd4f2c44 100644 --- a/libraries/di/build.gradle.kts +++ b/libraries/di/build.gradle.kts @@ -12,4 +12,5 @@ plugins { dependencies { api(libs.inject) + api(libs.metro.runtime) } diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/BaseDirectory.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/BaseDirectory.kt new file mode 100644 index 0000000000..b584e55cf2 --- /dev/null +++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/BaseDirectory.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2022-2024 New Vector 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.di + +import dev.zacsweers.metro.Qualifier + +/** + * Qualifies a [File] object which represents the application base directory. + */ +//@Retention(AnnotationRetention.RUNTIME) +@MustBeDocumented +@Qualifier +@Target( + AnnotationTarget.CLASS, + AnnotationTarget.FIELD, + AnnotationTarget.FUNCTION, + AnnotationTarget.PROPERTY, + AnnotationTarget.PROPERTY_GETTER, + AnnotationTarget.VALUE_PARAMETER, + AnnotationTarget.TYPE, +) +public annotation class BaseDirectory diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/CacheDirectory.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/CacheDirectory.kt index cf319d633b..e17f38562a 100644 --- a/libraries/di/src/main/kotlin/io/element/android/libraries/di/CacheDirectory.kt +++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/CacheDirectory.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.di -import javax.inject.Qualifier +import dev.zacsweers.metro.Qualifier /** * Qualifies a [File] object which represents the application cache directory. @@ -15,4 +15,13 @@ import javax.inject.Qualifier @Retention(AnnotationRetention.RUNTIME) @MustBeDocumented @Qualifier -annotation class CacheDirectory +@Target( + AnnotationTarget.CLASS, + AnnotationTarget.FIELD, + AnnotationTarget.FUNCTION, + AnnotationTarget.PROPERTY, + AnnotationTarget.PROPERTY_GETTER, + AnnotationTarget.VALUE_PARAMETER, + AnnotationTarget.TYPE, +) +public annotation class CacheDirectory diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/SingleIn.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/SingleIn.kt deleted file mode 100644 index a8441295a0..0000000000 --- a/libraries/di/src/main/kotlin/io/element/android/libraries/di/SingleIn.kt +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2022-2024 New Vector 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.di - -import javax.inject.Scope -import kotlin.reflect.KClass - -@Scope -@Retention(AnnotationRetention.RUNTIME) -annotation class SingleIn(val clazz: KClass<*>) diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/AppCoroutineScope.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/AppCoroutineScope.kt index ea597e56e1..9ebf83583e 100644 --- a/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/AppCoroutineScope.kt +++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/AppCoroutineScope.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.di.annotations -import javax.inject.Qualifier +import dev.zacsweers.metro.Qualifier /** * Qualifies a [CoroutineScope] object which represents the base coroutine scope to use for the application. diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/ApplicationContext.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/ApplicationContext.kt similarity index 73% rename from libraries/di/src/main/kotlin/io/element/android/libraries/di/ApplicationContext.kt rename to libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/ApplicationContext.kt index 27800192f7..ad70c53bce 100644 --- a/libraries/di/src/main/kotlin/io/element/android/libraries/di/ApplicationContext.kt +++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/ApplicationContext.kt @@ -1,13 +1,13 @@ /* - * Copyright 2022-2024 New Vector Ltd. + * Copyright 2025 New Vector 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.di +package io.element.android.libraries.di.annotations -import javax.inject.Qualifier +import dev.zacsweers.metro.Qualifier /** * Qualifies a [Context] object that represents the application context. diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/SessionCoroutineScope.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/SessionCoroutineScope.kt index 2d635ceee2..473eaaf90c 100644 --- a/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/SessionCoroutineScope.kt +++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/annotations/SessionCoroutineScope.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.di.annotations -import javax.inject.Qualifier +import dev.zacsweers.metro.Qualifier /** * Qualifies a [CoroutineScope] object which represents the base coroutine scope to use for an active session. diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatter.kt index 7c883f17e9..6e4398c78a 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatter.kt @@ -9,7 +9,7 @@ package io.element.android.libraries.eventformatter.impl import androidx.annotation.StringRes import androidx.compose.ui.text.AnnotatedString -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.eventformatter.api.PinnedMessagesBannerFormatter import io.element.android.libraries.matrix.api.permalink.PermalinkParser @@ -35,10 +35,11 @@ import io.element.android.libraries.matrix.api.timeline.item.event.getDisambigua import io.element.android.libraries.matrix.ui.messages.toPlainText import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultPinnedMessagesBannerFormatter @Inject constructor( +@Inject +class DefaultPinnedMessagesBannerFormatter( private val sp: StringProvider, private val permalinkParser: PermalinkParser, ) : PinnedMessagesBannerFormatter { diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt index d6aabb5f91..4804258445 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.eventformatter.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter import io.element.android.libraries.eventformatter.impl.mode.RenderingMode @@ -42,10 +42,11 @@ import io.element.android.libraries.matrix.api.timeline.item.event.getDisambigua import io.element.android.libraries.matrix.ui.messages.toPlainText import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultRoomLastMessageFormatter @Inject constructor( +@Inject +class DefaultRoomLastMessageFormatter( private val sp: StringProvider, private val roomMembershipContentFormatter: RoomMembershipContentFormatter, private val profileChangeContentFormatter: ProfileChangeContentFormatter, diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt index a5f806d7b3..b5e03853fc 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.eventformatter.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.di.SessionScope import io.element.android.libraries.eventformatter.api.TimelineEventFormatter @@ -29,10 +29,11 @@ import io.element.android.libraries.matrix.api.timeline.item.event.UnknownConten import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultTimelineEventFormatter @Inject constructor( +@Inject +class DefaultTimelineEventFormatter( private val sp: StringProvider, private val buildMeta: BuildMeta, private val roomMembershipContentFormatter: RoomMembershipContentFormatter, diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt index 91ae9b014b..cf9b0367cf 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt @@ -10,9 +10,10 @@ package io.element.android.libraries.eventformatter.impl import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ProfileChangeContentFormatter @Inject constructor( +@Inject +class ProfileChangeContentFormatter( private val sp: StringProvider, ) { fun format( diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt index 5d6e695b7c..34d7360a68 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt @@ -12,9 +12,10 @@ import io.element.android.libraries.matrix.api.timeline.item.event.MembershipCha import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent import io.element.android.services.toolbox.api.strings.StringProvider import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RoomMembershipContentFormatter @Inject constructor( +@Inject +class RoomMembershipContentFormatter( private val matrixClient: MatrixClient, private val sp: StringProvider, ) { diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt index 3f0f4a1dc2..92a307e0ec 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt @@ -13,9 +13,10 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StateContent import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class StateContentFormatter @Inject constructor( +@Inject +class StateContentFormatter( private val sp: StringProvider, ) { fun format( diff --git a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagService.kt b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagService.kt index 21f1f1c2e0..3a05518afc 100644 --- a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagService.kt +++ b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagService.kt @@ -7,19 +7,20 @@ package io.element.android.libraries.featureflag.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.featureflag.api.Feature import io.element.android.libraries.featureflag.api.FeatureFlagService import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class DefaultFeatureFlagService @Inject constructor( +@Inject +class DefaultFeatureFlagService( private val providers: Set<@JvmSuppressWildcards FeatureFlagProvider>, private val buildMeta: BuildMeta, ) : FeatureFlagService { diff --git a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/PreferencesFeatureFlagProvider.kt b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/PreferencesFeatureFlagProvider.kt index 357bf3c548..f477d2ea0d 100644 --- a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/PreferencesFeatureFlagProvider.kt +++ b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/PreferencesFeatureFlagProvider.kt @@ -9,18 +9,19 @@ package io.element.android.libraries.featureflag.impl import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.featureflag.api.Feature import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map -import javax.inject.Inject /** * Note: this will be used only in the nightly and in the debug build. */ -class PreferencesFeatureFlagProvider @Inject constructor( +@Inject +class PreferencesFeatureFlagProvider( private val buildMeta: BuildMeta, preferenceDataStoreFactory: PreferenceDataStoreFactory, ) : MutableFeatureFlagProvider { 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/FeatureFlagModule.kt index d39ef96e92..74c0882197 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/FeatureFlagModule.kt @@ -7,15 +7,15 @@ package io.element.android.libraries.featureflag.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides import dagger.multibindings.ElementsIntoSet -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import dev.zacsweers.metro.AppScope import io.element.android.libraries.featureflag.impl.FeatureFlagProvider import io.element.android.libraries.featureflag.impl.PreferencesFeatureFlagProvider -@Module +@BindingContainer @ContributesTo(AppScope::class) object FeatureFlagModule { @JvmStatic diff --git a/libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/FullScreenIntentPermissionsPresenter.kt b/libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/FullScreenIntentPermissionsPresenter.kt index ca9810c41d..b05aad303c 100644 --- a/libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/FullScreenIntentPermissionsPresenter.kt +++ b/libraries/fullscreenintent/impl/src/main/kotlin/io/element/android/libraries/fullscreenintent/impl/FullScreenIntentPermissionsPresenter.kt @@ -19,6 +19,9 @@ import androidx.core.app.NotificationManagerCompat import androidx.core.net.toUri import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.fullscreenintent.api.FullScreenIntentPermissionsEvents @@ -28,9 +31,10 @@ import io.element.android.services.toolbox.api.intent.ExternalIntentLauncher import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch -import javax.inject.Inject -class FullScreenIntentPermissionsPresenter @Inject constructor( +@SingleIn(AppScope::class) +@Inject +class FullScreenIntentPermissionsPresenter( private val buildVersionSdkIntProvider: BuildVersionSdkIntProvider, private val externalIntentLauncher: ExternalIntentLauncher, private val buildMeta: BuildMeta, 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/FullScreenIntentModule.kt index 363d1db814..8a95885059 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/FullScreenIntentModule.kt @@ -7,16 +7,16 @@ package io.element.android.libraries.fullscreenintent.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.fullscreenintent.api.FullScreenIntentPermissionsState import io.element.android.libraries.fullscreenintent.impl.FullScreenIntentPermissionsPresenter @ContributesTo(AppScope::class) -@Module +@BindingContainer interface FullScreenIntentModule { @Binds fun bindFullScreenIntentPermissionsPresenter(presenter: FullScreenIntentPermissionsPresenter): Presenter diff --git a/libraries/indicator/impl/src/main/kotlin/io/element/android/libraries/indicator/impl/DefaultIndicatorService.kt b/libraries/indicator/impl/src/main/kotlin/io/element/android/libraries/indicator/impl/DefaultIndicatorService.kt index 20f23f907e..e7357d0ca0 100644 --- a/libraries/indicator/impl/src/main/kotlin/io/element/android/libraries/indicator/impl/DefaultIndicatorService.kt +++ b/libraries/indicator/impl/src/main/kotlin/io/element/android/libraries/indicator/impl/DefaultIndicatorService.kt @@ -13,17 +13,18 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.indicator.api.IndicatorService import io.element.android.libraries.matrix.api.encryption.BackupState import io.element.android.libraries.matrix.api.encryption.EncryptionService import io.element.android.libraries.matrix.api.encryption.RecoveryState import io.element.android.libraries.matrix.api.verification.SessionVerificationService -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultIndicatorService @Inject constructor( +@Inject +class DefaultIndicatorService( private val sessionVerificationService: SessionVerificationService, private val encryptionService: EncryptionService, ) : IndicatorService { diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/mxc/MxcTools.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/mxc/MxcTools.kt index 7eb3285f74..94b18bdead 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/mxc/MxcTools.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/mxc/MxcTools.kt @@ -7,9 +7,10 @@ package io.element.android.libraries.matrix.api.mxc -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class MxcTools @Inject constructor() { +@Inject +class MxcTools() { /** * Regex to match a Matrix Content (mxc://) URI. * diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/CurrentSessionIdHolder.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/CurrentSessionIdHolder.kt index a18d0c2fb7..76d29285db 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/CurrentSessionIdHolder.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/CurrentSessionIdHolder.kt @@ -8,13 +8,14 @@ package io.element.android.libraries.matrix.api.user import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(SessionScope::class) -class CurrentSessionIdHolder @Inject constructor(matrixClient: MatrixClient) { +@Inject +class CurrentSessionIdHolder(matrixClient: MatrixClient) { val current = matrixClient.sessionId fun isCurrentSession(sessionId: SessionId?): Boolean = current == sessionId diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt index 51c9b4c380..61630927ea 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt @@ -7,17 +7,18 @@ package io.element.android.libraries.matrix.impl -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import org.matrix.rustcomponents.sdk.ClientBuilder -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface ClientBuilderProvider { fun provide(): ClientBuilder } @ContributesBinding(AppScope::class) -class RustClientBuilderProvider @Inject constructor() : ClientBuilderProvider { +@Inject +class RustClientBuilderProvider() : ClientBuilderProvider { override fun provide(): ClientBuilder { return ClientBuilder() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt index cf4072b1b4..44140cf9fd 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt @@ -38,11 +38,14 @@ import uniffi.matrix_sdk_crypto.CollectStrategy import uniffi.matrix_sdk_crypto.DecryptionSettings import uniffi.matrix_sdk_crypto.TrustRequirement import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Named +import io.element.android.libraries.di.BaseDirectory -class RustMatrixClientFactory @Inject constructor( - private val baseDirectory: File, - @CacheDirectory private val cacheDirectory: File, +@Inject +class RustMatrixClientFactory( + @Named("baseDirectory") private val baseDirectory: File, + @Named("cacheDirectory") private val cacheDirectory: File, @AppCoroutineScope private val appCoroutineScope: CoroutineScope, private val coroutineDispatchers: CoroutineDispatchers, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt index b5dc6e27bf..2ef4e0279a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt @@ -7,14 +7,15 @@ package io.element.android.libraries.matrix.impl -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.SdkMetadata import org.matrix.rustcomponents.sdk.sdkGitSha -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class RustSdkMetadata @Inject constructor() : SdkMetadata { +@Inject +class RustSdkMetadata() : SdkMetadata { override val sdkGitSha: String get() = sdkGitSha() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/OidcConfigurationProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/OidcConfigurationProvider.kt index ea398f935d..44dd90690b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/OidcConfigurationProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/OidcConfigurationProvider.kt @@ -11,9 +11,10 @@ import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.matrix.api.auth.OidcConfig import io.element.android.libraries.matrix.api.auth.OidcRedirectUrlProvider import org.matrix.rustcomponents.sdk.OidcConfiguration -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class OidcConfigurationProvider @Inject constructor( +@Inject +class OidcConfigurationProvider( private val buildMeta: BuildMeta, private val oidcRedirectUrlProvider: OidcRedirectUrlProvider, ) { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt index 1a044a9f4a..c100cd00c3 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt @@ -7,12 +7,12 @@ package io.element.android.libraries.matrix.impl.auth -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.auth.MatrixHomeServerDetails @@ -49,11 +49,12 @@ import org.matrix.rustcomponents.sdk.QrLoginProgress import org.matrix.rustcomponents.sdk.QrLoginProgressListener import timber.log.Timber import uniffi.matrix_sdk.OAuthAuthorizationData -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class RustMatrixAuthenticationService @Inject constructor( +@Inject +class RustMatrixAuthenticationService( private val sessionPathsFactory: SessionPathsFactory, private val coroutineDispatchers: CoroutineDispatchers, private val sessionStore: SessionStore, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt index 367a272a75..fcf39b1b21 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt @@ -7,16 +7,17 @@ package io.element.android.libraries.matrix.impl.auth.qrlogin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginDataFactory import org.matrix.rustcomponents.sdk.QrCodeData -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class RustQrCodeLoginDataFactory @Inject constructor() : MatrixQrCodeLoginDataFactory { +@Inject +class RustQrCodeLoginDataFactory() : MatrixQrCodeLoginDataFactory { override fun parseQrCodeData(data: ByteArray): Result { return runCatchingExceptions { SdkQrCodeLoginData(QrCodeData.fromBytes(data)) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt index 5e81a71c98..9a4fdc83d0 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt @@ -7,15 +7,16 @@ package io.element.android.libraries.matrix.impl.certificates -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import timber.log.Timber import java.security.KeyStore import java.security.KeyStoreException -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultUserCertificatesProvider @Inject constructor() : UserCertificatesProvider { +@Inject +class DefaultUserCertificatesProvider() : UserCertificatesProvider { /** * Get additional user-installed certificates from the `AndroidCAStore` `Keystore`. * 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/SessionMatrixModule.kt index 6a04079a7e..ef24cbba1a 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/SessionMatrixModule.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.matrix.impl.di -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.MatrixClient @@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.api.sync.SyncService import io.element.android.libraries.matrix.api.verification.SessionVerificationService import kotlinx.coroutines.CoroutineScope -@Module +@BindingContainer @ContributesTo(SessionScope::class) object SessionMatrixModule { @Provides diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt index 941cdbb189..5434ba4ec0 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt @@ -8,15 +8,16 @@ package io.element.android.libraries.matrix.impl.keys import android.util.Base64 -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import java.security.SecureRandom -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val SECRET_SIZE = 256 @ContributesBinding(AppScope::class) -class DefaultPassphraseGenerator @Inject constructor() : PassphraseGenerator { +@Inject +class DefaultPassphraseGenerator() : PassphraseGenerator { override fun generatePassphrase(): String? { val key = ByteArray(size = SECRET_SIZE) SecureRandom().nextBytes(key) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt index e4d0ef4799..9826e3ddd2 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt @@ -10,11 +10,14 @@ package io.element.android.libraries.matrix.impl.paths import io.element.android.libraries.di.CacheDirectory import java.io.File import java.util.UUID -import javax.inject.Inject +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Named +import io.element.android.libraries.di.BaseDirectory -class SessionPathsFactory @Inject constructor( - private val baseDirectory: File, - @CacheDirectory private val cacheDirectory: File, +@Inject +class SessionPathsFactory( + @Named("baseDirectory") private val baseDirectory: File, + @Named("cacheDirectory") private val cacheDirectory: File, ) { fun create(): SessionPaths { val subPath = UUID.randomUUID().toString() diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt index 9e881f18aa..9b2604e50b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt @@ -9,18 +9,19 @@ package io.element.android.libraries.matrix.impl.permalink import android.net.Uri import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.MatrixConfiguration import io.element.android.libraries.core.extensions.replacePrefix -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.permalink.MatrixToConverter -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Mapping of an input URI to a matrix.to compliant URI. */ @ContributesBinding(AppScope::class) -class DefaultMatrixToConverter @Inject constructor() : MatrixToConverter { +@Inject +class DefaultMatrixToConverter() : MatrixToConverter { /** * Try to convert a URL from an element web instance or from a client permalink to a matrix.to url. * To be successfully converted, URL path should contain one of the [SUPPORTED_PATHS]. diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt index eb0524886f..c597b4ce8d 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.matrix.impl.permalink -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.MatrixPatterns import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.UserId @@ -17,10 +17,11 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkBuilder import io.element.android.libraries.matrix.api.permalink.PermalinkBuilderError import org.matrix.rustcomponents.sdk.matrixToRoomAliasPermalink import org.matrix.rustcomponents.sdk.matrixToUserPermalink -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultPermalinkBuilder @Inject constructor() : PermalinkBuilder { +@Inject +class DefaultPermalinkBuilder() : PermalinkBuilder { override fun permalinkForUser(userId: UserId): Result { if (!MatrixPatterns.isUserId(userId.value)) { return Result.failure(PermalinkBuilderError.InvalidData) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt index 974c88825d..97ba1d959f 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt @@ -8,9 +8,9 @@ package io.element.android.libraries.matrix.impl.permalink import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId @@ -22,7 +22,7 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkParser import kotlinx.collections.immutable.toImmutableList import org.matrix.rustcomponents.sdk.MatrixId import org.matrix.rustcomponents.sdk.parseMatrixEntityFrom -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * This class turns a uri to a [PermalinkData]. @@ -32,7 +32,8 @@ import javax.inject.Inject * or matrix: permalinks (e.g. matrix:u/chagai95:matrix.org) */ @ContributesBinding(AppScope::class) -class DefaultPermalinkParser @Inject constructor( +@Inject +class DefaultPermalinkParser( private val matrixToConverter: MatrixToConverter ) : PermalinkParser { /** diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt index 1324ebe796..c9f9e4097c 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt @@ -7,16 +7,17 @@ package io.element.android.libraries.matrix.impl.platform -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.platform.InitPlatformService import io.element.android.libraries.matrix.api.tracing.TracingConfiguration import io.element.android.libraries.matrix.impl.tracing.map import org.matrix.rustcomponents.sdk.initPlatform -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class RustInitPlatformService @Inject constructor() : InitPlatformService { +@Inject +class RustInitPlatformService() : InitPlatformService { override fun init(tracingConfiguration: TracingConfiguration) { initPlatform( config = tracingConfiguration.map(), diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/proxy/DefaultProxyProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/proxy/DefaultProxyProvider.kt index 08809be5f7..9128448b1f 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/proxy/DefaultProxyProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/proxy/DefaultProxyProvider.kt @@ -11,11 +11,11 @@ import android.content.Context import android.net.ConnectivityManager import android.provider.Settings import androidx.core.content.getSystemService -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Provides the proxy settings from the system. @@ -29,7 +29,8 @@ import javax.inject.Inject * ``` */ @ContributesBinding(AppScope::class) -class DefaultProxyProvider @Inject constructor( +@Inject +class DefaultProxyProvider( @ApplicationContext private val context: Context ) : ProxyProvider { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt index 126c288a9d..294917a5fa 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt @@ -7,19 +7,20 @@ package io.element.android.libraries.matrix.impl.room -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.room.StateEventType import org.matrix.rustcomponents.sdk.FilterTimelineEventType import org.matrix.rustcomponents.sdk.TimelineEventTypeFilter -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface TimelineEventTypeFilterFactory { fun create(listStateEventType: List): TimelineEventTypeFilter } @ContributesBinding(AppScope::class) -class RustTimelineEventTypeFilterFactory @Inject constructor() : TimelineEventTypeFilterFactory { +@Inject +class RustTimelineEventTypeFilterFactory() : TimelineEventTypeFilterFactory { override fun create(listStateEventType: List): TimelineEventTypeFilter { return TimelineEventTypeFilter.exclude( listStateEventType.map { stateEventType -> diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt index a8d9abfc80..6ab91f7632 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt @@ -7,14 +7,15 @@ package io.element.android.libraries.matrix.impl.room.alias -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultRoomAliasHelper @Inject constructor() : RoomAliasHelper { +@Inject +class DefaultRoomAliasHelper() : RoomAliasHelper { override fun roomAliasNameFromRoomDisplayName(name: String): String { return org.matrix.rustcomponents.sdk.roomAliasNameFromRoomDisplayName(name) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt index 98a2175df9..e7ee7f7d26 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.matrix.impl.room.join -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.di.SessionScope @@ -18,10 +18,11 @@ import io.element.android.libraries.matrix.api.exception.ErrorKind import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.matrix.impl.analytics.toAnalyticsJoinedRoom import io.element.android.services.analytics.api.AnalyticsService -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultJoinRoom @Inject constructor( +@Inject +class DefaultJoinRoom( private val client: MatrixClient, private val analyticsService: AnalyticsService, ) : JoinRoom { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/server/DefaultUserServerResolver.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/server/DefaultUserServerResolver.kt index 584f7931fe..cf26d07411 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/server/DefaultUserServerResolver.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/server/DefaultUserServerResolver.kt @@ -7,14 +7,15 @@ package io.element.android.libraries.matrix.impl.server -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.server.UserServerResolver -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultUserServerResolver @Inject constructor( +@Inject +class DefaultUserServerResolver( private val matrixClient: MatrixClient, ) : UserServerResolver { override fun resolve(): String { diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt index 728bf136b8..e6fac6c5d4 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.matrix.impl.tracing -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.tracing.LogLevel import io.element.android.libraries.matrix.api.tracing.TracingConfiguration import io.element.android.libraries.matrix.api.tracing.TracingService @@ -17,10 +17,11 @@ import io.element.android.libraries.matrix.api.tracing.WriteToFilesConfiguration import org.matrix.rustcomponents.sdk.TracingFileConfiguration import org.matrix.rustcomponents.sdk.reloadTracingFileWriter import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class RustTracingService @Inject constructor(private val buildMeta: BuildMeta) : TracingService { +@Inject +class RustTracingService(private val buildMeta: BuildMeta) : TracingService { override fun createTimberTree(target: String): Timber.Tree { return RustTracingTree(target = target, retrieveFromStackTrace = buildMeta.isDebuggable) } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt index 863dd6f0a2..1f63d7f001 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.matrix.impl.widget -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.widget.CallAnalyticCredentialsProvider import io.element.android.libraries.matrix.api.widget.CallWidgetSettingsProvider import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings @@ -21,11 +21,12 @@ import uniffi.matrix_sdk.EncryptionSystem import uniffi.matrix_sdk.HeaderStyle import uniffi.matrix_sdk.NotificationType import uniffi.matrix_sdk.VirtualElementCallWidgetOptions -import javax.inject.Inject +import dev.zacsweers.metro.Inject import uniffi.matrix_sdk.Intent as CallIntent @ContributesBinding(AppScope::class) -class DefaultCallWidgetSettingsProvider @Inject constructor( +@Inject +class DefaultCallWidgetSettingsProvider( private val buildMeta: BuildMeta, private val callAnalyticsCredentialsProvider: CallAnalyticCredentialsProvider, private val analyticsService: AnalyticsService, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt index f8722a93a4..0ac53aff97 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt @@ -13,20 +13,21 @@ import coil3.ImageLoader import coil3.gif.AnimatedImageDecoder import coil3.gif.GifDecoder import coil3.network.okhttp.OkHttpNetworkFetcherFactory -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClient import okhttp3.OkHttpClient -import javax.inject.Inject -import javax.inject.Provider +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Provider interface LoggedInImageLoaderFactory { fun newImageLoader(matrixClient: MatrixClient): ImageLoader } @ContributesBinding(AppScope::class) -class DefaultLoggedInImageLoaderFactory @Inject constructor( +@Inject +class DefaultLoggedInImageLoaderFactory( @ApplicationContext private val context: Context, private val okHttpClient: Provider, ) : LoggedInImageLoaderFactory { @@ -37,7 +38,7 @@ class DefaultLoggedInImageLoaderFactory @Inject constructor( OkHttpNetworkFetcherFactory( callFactory = { // Use newBuilder, see https://coil-kt.github.io/coil/network/#using-a-custom-okhttpclient - okHttpClient.get().newBuilder().build() + okHttpClient().newBuilder().build() } ) ) @@ -56,7 +57,8 @@ class DefaultLoggedInImageLoaderFactory @Inject constructor( } } -class NotLoggedInImageLoaderFactory @Inject constructor( +@Inject +class NotLoggedInImageLoaderFactory( @ApplicationContext private val context: Context, private val okHttpClient: Provider, ) { @@ -67,7 +69,7 @@ class NotLoggedInImageLoaderFactory @Inject constructor( OkHttpNetworkFetcherFactory( callFactory = { // Use newBuilder, see https://coil-kt.github.io/coil/network/#using-a-custom-okhttpclient - okHttpClient.get().newBuilder().build() + okHttpClient().newBuilder().build() } ) ) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderHolder.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderHolder.kt index 0c9e0cb938..6d254ddbad 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderHolder.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderHolder.kt @@ -8,14 +8,14 @@ package io.element.android.libraries.matrix.ui.media import coil3.ImageLoader -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface ImageLoaderHolder { fun get(client: MatrixClient): ImageLoader @@ -24,7 +24,8 @@ interface ImageLoaderHolder { @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class DefaultImageLoaderHolder @Inject constructor( +@Inject +class DefaultImageLoaderHolder( private val loggedInImageLoaderFactory: LoggedInImageLoaderFactory, private val sessionObserver: SessionObserver, ) : ImageLoaderHolder { diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt index 0c02a24a0e..2185399611 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt @@ -8,17 +8,18 @@ package io.element.android.libraries.matrix.ui.messages import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.runningFold -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) -class RoomMemberProfilesCache @Inject constructor() { +@Inject +class RoomMemberProfilesCache() { private val cache = MutableStateFlow(mapOf()) val updateFlow = cache.drop(1).runningFold(0) { acc, _ -> acc + 1 } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt index 598b7c28da..76b3421bc1 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt @@ -8,7 +8,7 @@ package io.element.android.libraries.matrix.ui.messages import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.roomlist.RoomSummary @@ -16,10 +16,11 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.runningFold -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) -class RoomNamesCache @Inject constructor() { +@Inject +class RoomNamesCache() { private val cache = MutableStateFlow(mapOf()) val updateFlow = cache.drop(1).runningFold(0) { acc, _ -> acc + 1 } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/LoadingRoomState.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/LoadingRoomState.kt index 7fc95035c6..76d7c61321 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/LoadingRoomState.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/LoadingRoomState.kt @@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn -import javax.inject.Inject +import dev.zacsweers.metro.Inject @Immutable sealed interface LoadingRoomState { @@ -36,7 +36,8 @@ open class LoadingRoomStateProvider : PreviewParameterProvider ) } -class LoadingRoomStateFlowFactory @Inject constructor(private val matrixClient: MatrixClient) { +@Inject +class LoadingRoomStateFlowFactory(private val matrixClient: MatrixClient) { fun create(lifecycleScope: CoroutineScope, roomId: RoomId): StateFlow = getJoinedRoomFlow(roomId) .map { room -> diff --git a/libraries/mediapickers/impl/src/main/kotlin/io/element/android/libraries/mediapickers/impl/DefaultPickerProvider.kt b/libraries/mediapickers/impl/src/main/kotlin/io/element/android/libraries/mediapickers/impl/DefaultPickerProvider.kt index add63d4a32..e45390a864 100644 --- a/libraries/mediapickers/impl/src/main/kotlin/io/element/android/libraries/mediapickers/impl/DefaultPickerProvider.kt +++ b/libraries/mediapickers/impl/src/main/kotlin/io/element/android/libraries/mediapickers/impl/DefaultPickerProvider.kt @@ -15,19 +15,20 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalInspectionMode import androidx.core.content.FileProvider -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.mediapickers.api.ComposePickerLauncher import io.element.android.libraries.mediapickers.api.NoOpPickerLauncher import io.element.android.libraries.mediapickers.api.PickerLauncher import io.element.android.libraries.mediapickers.api.PickerProvider import io.element.android.libraries.mediapickers.api.PickerType import java.io.File -import javax.inject.Inject @ContributesBinding(AppScope::class) -class DefaultPickerProvider @Inject constructor( +@Inject +class DefaultPickerProvider( @ApplicationContext private val context: Context, ) : PickerProvider { /** diff --git a/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/DefaultMediaPlayer.kt b/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/DefaultMediaPlayer.kt index 45e600f8b9..94703c9699 100644 --- a/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/DefaultMediaPlayer.kt +++ b/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/DefaultMediaPlayer.kt @@ -10,11 +10,11 @@ package io.element.android.libraries.mediaplayer.impl import androidx.media3.common.C import androidx.media3.common.MediaItem import androidx.media3.common.Player -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.audio.api.AudioFocus import io.element.android.libraries.audio.api.AudioFocusRequester import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.mediaplayer.api.MediaPlayer import kotlinx.coroutines.CoroutineScope @@ -28,7 +28,7 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.timeout import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds /** @@ -36,7 +36,8 @@ import kotlin.time.Duration.Companion.seconds */ @ContributesBinding(RoomScope::class) @SingleIn(RoomScope::class) -class DefaultMediaPlayer @Inject constructor( +@Inject +class DefaultMediaPlayer( private val player: SimplePlayer, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, 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 df1413161e..7c51664443 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 @@ -11,10 +11,10 @@ import android.content.Context import androidx.media3.common.MediaItem import androidx.media3.common.Player import androidx.media3.exoplayer.ExoPlayer -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.RoomScope /** @@ -42,7 +42,7 @@ interface SimplePlayer { } @ContributesTo(RoomScope::class) -@Module +@BindingContainer object SimplePlayerModule { @Provides fun simplePlayerProvider( diff --git a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MaxUploadSizeProvider.kt b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MaxUploadSizeProvider.kt index 884d75e325..61cbec553a 100644 --- a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MaxUploadSizeProvider.kt +++ b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MaxUploadSizeProvider.kt @@ -8,12 +8,13 @@ package io.element.android.libraries.mediaupload.api import io.element.android.libraries.matrix.api.MatrixClient -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Provides the maximum upload size allowed by the Matrix server. */ -class MaxUploadSizeProvider @Inject constructor( +@Inject +class MaxUploadSizeProvider( private val matrixClient: MatrixClient, ) { suspend fun getMaxUploadSize(): Result { diff --git a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt index 2de5b84284..62731d1117 100644 --- a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt +++ b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MediaSender.kt @@ -8,9 +8,9 @@ package io.element.android.libraries.mediaupload.api import android.net.Uri -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.hash.hash import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.extensions.flatMapCatching @@ -25,7 +25,8 @@ import timber.log.Timber import java.io.File import java.util.concurrent.ConcurrentHashMap -class MediaSender @AssistedInject constructor( +@Inject +class MediaSender( private val preProcessor: MediaPreProcessor, private val room: JoinedRoom, @Assisted private val timelineMode: Timeline.Mode, diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt index cbca90f940..f60ea50a6a 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt @@ -12,7 +12,7 @@ import android.graphics.BitmapFactory import android.media.MediaMetadataRetriever import android.net.Uri import androidx.exifinterface.media.ExifInterface -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.file.TemporaryUriDeleter import io.element.android.libraries.androidutils.file.createTmpFile import io.element.android.libraries.androidutils.file.getFileName @@ -27,8 +27,8 @@ import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeAudio import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeImage import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeVideo -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.media.AudioInfo import io.element.android.libraries.matrix.api.media.FileInfo import io.element.android.libraries.matrix.api.media.ImageInfo @@ -45,12 +45,13 @@ import timber.log.Timber import java.io.File import java.io.InputStream import java.util.UUID -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds @ContributesBinding(AppScope::class) -class AndroidMediaPreProcessor @Inject constructor( +@Inject +class AndroidMediaPreProcessor( @ApplicationContext private val context: Context, private val thumbnailFactory: ThumbnailFactory, private val imageCompressor: ImageCompressor, diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/DefaultMediaOptimizationConfigProvider.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/DefaultMediaOptimizationConfigProvider.kt index 7642599077..b25dfdcd72 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/DefaultMediaOptimizationConfigProvider.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/DefaultMediaOptimizationConfigProvider.kt @@ -7,16 +7,17 @@ package io.element.android.libraries.mediaupload.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.mediaupload.api.MediaOptimizationConfig import io.element.android.libraries.mediaupload.api.MediaOptimizationConfigProvider import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import kotlinx.coroutines.flow.first -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultMediaOptimizationConfigProvider @Inject constructor( +@Inject +class DefaultMediaOptimizationConfigProvider( private val sessionPreferencesStore: SessionPreferencesStore, ) : MediaOptimizationConfigProvider { override suspend fun get(): MediaOptimizationConfig = MediaOptimizationConfig( diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt index 1076773873..33f097898f 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt @@ -17,13 +17,14 @@ import io.element.android.libraries.androidutils.bitmap.rotateToExifMetadataOrie import io.element.android.libraries.androidutils.file.createTmpFile import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.withContext import java.io.File import java.io.InputStream -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ImageCompressor @Inject constructor( +@Inject +class ImageCompressor( @ApplicationContext private val context: Context, private val dispatchers: CoroutineDispatchers, ) { diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt index 123d59b029..6ca1657896 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt @@ -23,14 +23,14 @@ import io.element.android.libraries.androidutils.bitmap.resizeToMax import io.element.android.libraries.androidutils.file.createTmpFile import io.element.android.libraries.androidutils.media.runAndRelease import io.element.android.libraries.core.mimetype.MimeTypes -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.media.ThumbnailInfo import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import kotlinx.coroutines.suspendCancellableCoroutine import timber.log.Timber import java.io.File import java.io.IOException -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.coroutines.resume /** @@ -50,7 +50,8 @@ private const val THUMB_MAX_HEIGHT = 600 */ private const val VIDEO_THUMB_FRAME = 0L -class ThumbnailFactory @Inject constructor( +@Inject +class ThumbnailFactory( @ApplicationContext private val context: Context, private val sdkIntProvider: BuildVersionSdkIntProvider ) { diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt index 04bffd6c94..c21294fb9e 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt @@ -30,7 +30,7 @@ import androidx.media3.transformer.VideoEncoderSettings import io.element.android.libraries.androidutils.file.createTmpFile import io.element.android.libraries.androidutils.file.safeDelete import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.preferences.api.store.VideoCompressionPreset import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.awaitClose @@ -42,9 +42,10 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class VideoCompressor @Inject constructor( +@Inject +class VideoCompressor( @ApplicationContext private val context: Context, ) { @OptIn(UnstableApi::class) diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt index 7d4a577604..e361375516 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt @@ -10,15 +10,16 @@ package io.element.android.libraries.mediaviewer.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.mediaviewer.api.MediaGalleryEntryPoint import io.element.android.libraries.mediaviewer.impl.gallery.root.MediaGalleryRootNode -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultMediaGalleryEntryPoint @Inject constructor() : MediaGalleryEntryPoint { +@Inject +class DefaultMediaGalleryEntryPoint() : MediaGalleryEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): MediaGalleryEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt index 2a137bb387..1f08f16d43 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt @@ -10,19 +10,20 @@ package io.element.android.libraries.mediaviewer.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.architecture.createNode import io.element.android.libraries.core.mimetype.MimeTypes -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.mediaviewer.api.MediaInfo import io.element.android.libraries.mediaviewer.api.MediaViewerEntryPoint import io.element.android.libraries.mediaviewer.impl.viewer.MediaViewerNode -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultMediaViewerEntryPoint @Inject constructor() : MediaViewerEntryPoint { +@Inject +class DefaultMediaViewerEntryPoint() : MediaViewerEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): MediaViewerEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/EventItemFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/EventItemFactory.kt index ed39faf080..7adbfb9a4b 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/EventItemFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/EventItemFactory.kt @@ -42,9 +42,10 @@ import io.element.android.libraries.mediaviewer.api.MediaInfo import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor import io.element.android.libraries.mediaviewer.impl.model.MediaItem import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class EventItemFactory @Inject constructor( +@Inject +class EventItemFactory( private val fileSizeFormatter: FileSizeFormatter, private val fileExtensionExtractor: FileExtensionExtractor, private val dateFormatter: DateFormatter, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/FocusedTimelineMediaGalleryDataSourceFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/FocusedTimelineMediaGalleryDataSourceFactory.kt index bdbffbfd1a..849899141f 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/FocusedTimelineMediaGalleryDataSourceFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/FocusedTimelineMediaGalleryDataSourceFactory.kt @@ -7,12 +7,12 @@ package io.element.android.libraries.mediaviewer.impl.datasource -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.mediaviewer.impl.model.MediaItem -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface FocusedTimelineMediaGalleryDataSourceFactory { fun createFor( @@ -23,7 +23,8 @@ interface FocusedTimelineMediaGalleryDataSourceFactory { } @ContributesBinding(RoomScope::class) -class DefaultFocusedTimelineMediaGalleryDataSourceFactory @Inject constructor( +@Inject +class DefaultFocusedTimelineMediaGalleryDataSourceFactory( private val room: JoinedRoom, private val timelineMediaItemsFactory: TimelineMediaItemsFactory, private val mediaItemsPostProcessor: MediaItemsPostProcessor, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt index a7ee01aa57..b161753e41 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.mediaviewer.impl.datasource -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.timeline.Timeline @@ -27,7 +27,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.flow.onEach import java.util.concurrent.atomic.AtomicBoolean -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface MediaGalleryDataSource { fun start() @@ -39,7 +39,8 @@ interface MediaGalleryDataSource { @SingleIn(RoomScope::class) @ContributesBinding(RoomScope::class) -class TimelineMediaGalleryDataSource @Inject constructor( +@Inject +class TimelineMediaGalleryDataSource( private val room: BaseRoom, private val mediaTimeline: MediaTimeline, private val timelineMediaItemsFactory: TimelineMediaItemsFactory, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt index 1d3fd09a6c..2559efe9bb 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt @@ -10,9 +10,10 @@ package io.element.android.libraries.mediaviewer.impl.datasource import io.element.android.libraries.mediaviewer.impl.model.GroupedMediaItems import io.element.android.libraries.mediaviewer.impl.model.MediaItem import kotlinx.collections.immutable.toImmutableList -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class MediaItemsPostProcessor @Inject constructor() { +@Inject +class MediaItemsPostProcessor() { fun process( mediaItems: List, ): GroupedMediaItems { diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaTimeline.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaTimeline.kt index c014689003..1fef4480ba 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaTimeline.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaTimeline.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.mediaviewer.impl.datasource -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UniqueId import io.element.android.libraries.matrix.api.room.CreateTimelineParams @@ -21,7 +21,7 @@ import io.element.android.libraries.mediaviewer.impl.model.hasEvent import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface MediaTimeline { suspend fun getTimeline(): Result @@ -36,7 +36,8 @@ interface MediaTimeline { */ @SingleIn(RoomScope::class) @ContributesBinding(RoomScope::class) -class LiveMediaTimeline @Inject constructor( +@Inject +class LiveMediaTimeline( private val room: JoinedRoom, ) : MediaTimeline { private var timeline: Timeline? = null diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/TimelineMediaItemsFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/TimelineMediaItemsFactory.kt index a759ba4d76..cd76ddf7fb 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/TimelineMediaItemsFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/TimelineMediaItemsFactory.kt @@ -21,9 +21,10 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TimelineMediaItemsFactory @Inject constructor( +@Inject +class TimelineMediaItemsFactory( private val dispatchers: CoroutineDispatchers, private val virtualItemFactory: VirtualItemFactory, private val eventItemFactory: EventItemFactory, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/VirtualItemFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/VirtualItemFactory.kt index 0c45edcf37..a12ff880f7 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/VirtualItemFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/VirtualItemFactory.kt @@ -12,9 +12,10 @@ import io.element.android.libraries.dateformatter.api.DateFormatterMode import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem import io.element.android.libraries.mediaviewer.impl.model.MediaItem -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class VirtualItemFactory @Inject constructor( +@Inject +class VirtualItemFactory( private val dateFormatter: DateFormatter, ) { fun create(timelineItem: MatrixTimelineItem.Virtual): MediaItem? { diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryNode.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryNode.kt index 77520763f5..ca5910cb5b 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryNode.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryNode.kt @@ -14,8 +14,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId @@ -24,7 +24,8 @@ import io.element.android.libraries.mediaviewer.impl.gallery.di.MediaItemPresent import io.element.android.libraries.mediaviewer.impl.model.MediaItem @ContributesNode(RoomScope::class) -class MediaGalleryNode @AssistedInject constructor( +@Inject +class MediaGalleryNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: MediaGalleryPresenter.Factory, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryPresenter.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryPresenter.kt index 27fcf2ce3e..f8addd5463 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryPresenter.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/MediaGalleryPresenter.kt @@ -16,9 +16,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.R import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter @@ -44,7 +44,8 @@ import io.element.android.libraries.mediaviewer.impl.model.mediaSource import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.launch -class MediaGalleryPresenter @AssistedInject constructor( +@Inject +class MediaGalleryPresenter( @Assisted private val navigator: MediaGalleryNavigator, private val room: BaseRoom, private val mediaGalleryDataSource: MediaGalleryDataSource, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/FakeTimelineItemPresenterFactories.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/FakeTimelineItemPresenterFactories.kt index 7a2094d890..fe3a65ff4a 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/FakeTimelineItemPresenterFactories.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/FakeTimelineItemPresenterFactories.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.voiceplayer.api.aVoiceMessageState fun aFakeMediaItemPresenterFactories() = MediaItemPresenterFactories( mapOf( Pair( - MediaItem.Voice::class.java, + MediaItem.Voice::class, MediaItemPresenterFactory { Presenter { aVoiceMessageState() } }, ), ) diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemEventContentKey.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemEventContentKey.kt index ad2e49f16f..5fda507174 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemEventContentKey.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/di/MediaItemEventContentKey.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.mediaviewer.impl.gallery.di -import dagger.MapKey +import dev.zacsweers.metro.MapKey import io.element.android.libraries.mediaviewer.impl.model.MediaItem import kotlin.reflect.KClass 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 02c0441d18..352b4f0b7c 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 @@ -9,25 +9,26 @@ package io.element.android.libraries.mediaviewer.impl.gallery.di import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.multibindings.Multibinds +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.di.SingleIn import io.element.android.libraries.mediaviewer.impl.model.MediaItem -import javax.inject.Inject +import kotlin.reflect.KClass /** * Dagger module that declares the [MediaItemPresenterFactory] map multi binding. * * Its sole purpose is to support the case of an empty map multibinding. */ -@Module +@BindingContainer @ContributesTo(RoomScope::class) interface MediaItemPresenterFactoriesModule { @Multibinds - fun multiBindMediaItemPresenterFactories(): @JvmSuppressWildcards Map, MediaItemPresenterFactory<*, *>> + fun multiBindMediaItemPresenterFactories(): @JvmSuppressWildcards Map, MediaItemPresenterFactory<*, *>> } /** @@ -38,8 +39,9 @@ interface MediaItemPresenterFactoriesModule { * goes out of the [LazyColumn] viewport. */ @SingleIn(RoomScope::class) -class MediaItemPresenterFactories @Inject constructor( - private val factories: @JvmSuppressWildcards Map, MediaItemPresenterFactory<*, *>>, +@Inject +class MediaItemPresenterFactories( + private val factories: @JvmSuppressWildcards Map, MediaItemPresenterFactory<*, *>>, ) { private val presenters: MutableMap> = mutableMapOf() @@ -57,7 +59,7 @@ class MediaItemPresenterFactories @Inject constructor( @Composable fun rememberPresenter( content: C, - contentClass: Class, + contentClass: KClass, ): Presenter = remember(content) { presenters[content]?.let { @Suppress("UNCHECKED_CAST") @@ -86,5 +88,5 @@ inline fun MediaItemPresenterFactories.re content: C ): Presenter = rememberPresenter( content = content, - contentClass = C::class.java + contentClass = C::class ) diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/root/MediaGalleryRootNode.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/root/MediaGalleryRootNode.kt index 5088616a18..6bc1a36980 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/root/MediaGalleryRootNode.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/gallery/root/MediaGalleryRootNode.kt @@ -15,8 +15,8 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.BackstackWithOverlayBox import io.element.android.libraries.architecture.BaseFlowNode @@ -40,7 +40,8 @@ import io.element.android.libraries.mediaviewer.impl.model.thumbnailSource import kotlinx.parcelize.Parcelize @ContributesNode(RoomScope::class) -class MediaGalleryRootNode @AssistedInject constructor( +@Inject +class MediaGalleryRootNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val mediaViewerEntryPoint: MediaViewerEntryPoint 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 92acc754fc..240208c831 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 @@ -8,13 +8,13 @@ package io.element.android.libraries.mediaviewer.impl.gallery.voice import androidx.compose.runtime.Composable -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject -import dagger.multibindings.IntoMap +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.IntoMap +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.RoomScope import io.element.android.libraries.mediaviewer.impl.gallery.di.MediaItemEventContentKey @@ -24,7 +24,7 @@ import io.element.android.libraries.voiceplayer.api.VoiceMessagePresenterFactory import io.element.android.libraries.voiceplayer.api.VoiceMessageState import kotlin.time.Duration -@Module +@BindingContainer @ContributesTo(RoomScope::class) interface VoiceMessagePresenterModule { @Binds @@ -33,7 +33,8 @@ interface VoiceMessagePresenterModule { fun bindVoiceMessagePresenterFactory(factory: VoiceMessagePresenter.Factory): MediaItemPresenterFactory<*, *> } -class VoiceMessagePresenter @AssistedInject constructor( +@Inject +class VoiceMessagePresenter( voiceMessagePresenterFactory: VoiceMessagePresenterFactory, @Assisted private val item: MediaItem.Voice, ) : Presenter { diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt index d6c43ce4c4..dd284ba224 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt @@ -29,14 +29,14 @@ import androidx.compose.ui.platform.LocalContext import androidx.core.content.FileProvider import androidx.core.content.PermissionChecker import androidx.core.net.toFile -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.system.startInstallFromSourceIntent import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.mimetype.MimeTypes -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.mediaviewer.api.local.LocalMedia import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -44,10 +44,11 @@ import timber.log.Timber import java.io.File import java.io.FileOutputStream import java.io.InputStream -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class AndroidLocalMediaActions @Inject constructor( +@Inject +class AndroidLocalMediaActions( @ApplicationContext private val context: Context, private val coroutineDispatchers: CoroutineDispatchers, private val buildMeta: BuildMeta, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaFactory.kt index aa4b2ec53e..6a14549b2e 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaFactory.kt @@ -10,14 +10,14 @@ package io.element.android.libraries.mediaviewer.impl.local import android.content.Context import android.net.Uri import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.file.getFileName import io.element.android.libraries.androidutils.file.getFileSize import io.element.android.libraries.androidutils.file.getMimeType import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.core.mimetype.MimeTypes -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.media.MediaFile import io.element.android.libraries.matrix.api.media.toFile @@ -25,10 +25,11 @@ import io.element.android.libraries.mediaviewer.api.MediaInfo import io.element.android.libraries.mediaviewer.api.local.LocalMedia import io.element.android.libraries.mediaviewer.api.local.LocalMediaFactory import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class AndroidLocalMediaFactory @Inject constructor( +@Inject +class AndroidLocalMediaFactory( @ApplicationContext private val context: Context, private val fileSizeFormatter: FileSizeFormatter, private val fileExtensionExtractor: FileExtensionExtractor, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt index 41c292a921..633fde7ea7 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt @@ -10,19 +10,20 @@ package io.element.android.libraries.mediaviewer.impl.local import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.viewfolder.api.TextFileViewer import io.element.android.libraries.audio.api.AudioFocus -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.mediaviewer.api.local.LocalMedia import io.element.android.libraries.mediaviewer.api.local.LocalMediaRenderer import me.saket.telephoto.zoomable.OverzoomEffect import me.saket.telephoto.zoomable.ZoomSpec import me.saket.telephoto.zoomable.rememberZoomableState -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultLocalMediaRenderer @Inject constructor( +@Inject +class DefaultLocalMediaRenderer( private val textFileViewer: TextFileViewer, private val audioFocus: AudioFocus, ) : LocalMediaRenderer { diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt index 4b54a401fa..ae2849f079 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt @@ -8,13 +8,14 @@ package io.element.android.libraries.mediaviewer.impl.util import android.webkit.MimeTypeMap -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class FileExtensionExtractorWithValidation @Inject constructor() : FileExtensionExtractor { +@Inject +class FileExtensionExtractorWithValidation() : FileExtensionExtractor { override fun extractFromName(name: String): String { val fileExtension = name.substringAfterLast('.', "") // Makes sure the extension is known by the system, otherwise default to binary extension. diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNode.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNode.kt index c5bca59db7..c1526fa703 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNode.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.compound.theme.ForcedDarkElementTheme import io.element.android.features.viewfolder.api.TextFileViewer @@ -33,7 +33,8 @@ import io.element.android.libraries.mediaviewer.impl.model.hasEvent import io.element.android.services.toolbox.api.systemclock.SystemClock @ContributesNode(RoomScope::class) -class MediaViewerNode @AssistedInject constructor( +@Inject +class MediaViewerNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: MediaViewerPresenter.Factory, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt index f900510321..b2534f3f71 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/MediaViewerPresenter.kt @@ -21,9 +21,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher @@ -49,7 +49,8 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import io.element.android.libraries.androidutils.R as UtilsR -class MediaViewerPresenter @AssistedInject constructor( +@Inject +class MediaViewerPresenter( @Assisted private val inputs: MediaViewerEntryPoint.Params, @Assisted private val navigator: MediaViewerNavigator, @Assisted private val dataSource: MediaViewerDataSource, diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt index 2c73ab2657..d2b7efeddf 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt @@ -9,7 +9,7 @@ package io.element.android.libraries.mediaviewer.impl.viewer import io.element.android.libraries.mediaviewer.impl.model.MediaItem import io.element.android.libraries.mediaviewer.impl.model.eventId -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * x and y are loading items. @@ -35,7 +35,8 @@ import javax.inject.Inject * -1 0 1 2 3 4 5 6 * (keyOffset = -1) */ -class PagerKeysHandler @Inject constructor() { +@Inject +class PagerKeysHandler() { private data class Data( val mediaItems: List, val keyOffset: Long, 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/NetworkModule.kt index 17e446bd9f..3a8ef40f15 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/NetworkModule.kt @@ -7,12 +7,12 @@ package io.element.android.libraries.network -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.network.interceptors.FormattedJsonHttpLogger import io.element.android.libraries.network.interceptors.UserAgentInterceptor import kotlinx.serialization.json.Json @@ -20,7 +20,7 @@ import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import java.util.concurrent.TimeUnit -@Module +@BindingContainer @ContributesTo(AppScope::class) object NetworkModule { @Provides diff --git a/libraries/network/src/main/kotlin/io/element/android/libraries/network/RetrofitFactory.kt b/libraries/network/src/main/kotlin/io/element/android/libraries/network/RetrofitFactory.kt index 195c25db35..261d7d02ba 100644 --- a/libraries/network/src/main/kotlin/io/element/android/libraries/network/RetrofitFactory.kt +++ b/libraries/network/src/main/kotlin/io/element/android/libraries/network/RetrofitFactory.kt @@ -7,22 +7,23 @@ package io.element.android.libraries.network +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Provider import io.element.android.libraries.core.uri.ensureTrailingSlash import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.kotlinx.serialization.asConverterFactory -import javax.inject.Inject -import javax.inject.Provider -class RetrofitFactory @Inject constructor( +@Inject +class RetrofitFactory( private val okHttpClient: Provider, private val json: Provider, ) { fun create(baseUrl: String): Retrofit = Retrofit.Builder() .baseUrl(baseUrl.ensureTrailingSlash()) - .addConverterFactory(json.get().asConverterFactory("application/json".toMediaType())) - .callFactory { request -> okHttpClient.get().newCall(request) } + .addConverterFactory(json().asConverterFactory("application/json".toMediaType())) + .callFactory { request -> okHttpClient().newCall(request) } .build() } diff --git a/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/UserAgentInterceptor.kt b/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/UserAgentInterceptor.kt index bddd8151ba..78920cf00a 100644 --- a/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/UserAgentInterceptor.kt +++ b/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/UserAgentInterceptor.kt @@ -11,9 +11,10 @@ import io.element.android.libraries.network.headers.HttpHeaders import io.element.android.libraries.network.useragent.UserAgentProvider import okhttp3.Interceptor import okhttp3.Response -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class UserAgentInterceptor @Inject constructor( +@Inject +class UserAgentInterceptor( private val userAgentProvider: UserAgentProvider, ) : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { diff --git a/libraries/network/src/main/kotlin/io/element/android/libraries/network/useragent/DefaultUserAgentProvider.kt b/libraries/network/src/main/kotlin/io/element/android/libraries/network/useragent/DefaultUserAgentProvider.kt index 265a3c6bc7..eac77e8a63 100644 --- a/libraries/network/src/main/kotlin/io/element/android/libraries/network/useragent/DefaultUserAgentProvider.kt +++ b/libraries/network/src/main/kotlin/io/element/android/libraries/network/useragent/DefaultUserAgentProvider.kt @@ -8,16 +8,17 @@ package io.element.android.libraries.network.useragent import android.os.Build -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.SdkMetadata -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultUserAgentProvider @Inject constructor( +@Inject +class DefaultUserAgentProvider( private val buildMeta: BuildMeta, private val sdkMeta: SdkMetadata, ) : UserAgentProvider { diff --git a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt index e975cde261..94840f821c 100644 --- a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt +++ b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt @@ -7,18 +7,19 @@ package io.element.android.libraries.oidc.impl -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcActionFlow import kotlinx.coroutines.flow.FlowCollector import kotlinx.coroutines.flow.MutableStateFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class DefaultOidcActionFlow @Inject constructor() : OidcActionFlow { +@Inject +class DefaultOidcActionFlow() : OidcActionFlow { private val mutableStateFlow = MutableStateFlow(null) override fun post(oidcAction: OidcAction) { diff --git a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcIntentResolver.kt b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcIntentResolver.kt index b4dbc0a582..e194fdb64d 100644 --- a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcIntentResolver.kt +++ b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcIntentResolver.kt @@ -8,14 +8,15 @@ package io.element.android.libraries.oidc.impl import android.content.Intent -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcIntentResolver -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultOidcIntentResolver @Inject constructor( +@Inject +class DefaultOidcIntentResolver( private val oidcUrlParser: OidcUrlParser, ) : OidcIntentResolver { override fun resolve(intent: Intent): OidcAction? { diff --git a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/OidcUrlParser.kt b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/OidcUrlParser.kt index 1a41492df6..54ee8fac4c 100644 --- a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/OidcUrlParser.kt +++ b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/OidcUrlParser.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.oidc.impl -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcRedirectUrlProvider import io.element.android.libraries.oidc.api.OidcAction -import javax.inject.Inject +import dev.zacsweers.metro.Inject fun interface OidcUrlParser { fun parse(url: String): OidcAction? @@ -22,7 +22,8 @@ fun interface OidcUrlParser { * TODO Find documentation about the format. */ @ContributesBinding(AppScope::class) -class DefaultOidcUrlParser @Inject constructor( +@Inject +class DefaultOidcUrlParser( private val oidcRedirectUrlProvider: OidcRedirectUrlProvider, ) : OidcUrlParser { /** diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt index c54d269ece..8aa0c38487 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt @@ -13,9 +13,9 @@ import androidx.compose.runtime.Composable import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.PermissionState import com.google.accompanist.permissions.rememberPermissionState -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface ComposablePermissionStateProvider { @Composable @@ -23,7 +23,8 @@ interface ComposablePermissionStateProvider { } @ContributesBinding(AppScope::class) -class AccompanistPermissionStateProvider @Inject constructor() : ComposablePermissionStateProvider { +@Inject +class AccompanistPermissionStateProvider() : ComposablePermissionStateProvider { @Composable override fun provide(permission: String, onPermissionResult: (Boolean) -> Unit): PermissionState { return rememberPermissionState( diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionStateProvider.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionStateProvider.kt index 35738e7e61..9eb9717515 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionStateProvider.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionStateProvider.kt @@ -10,18 +10,19 @@ package io.element.android.libraries.permissions.impl import android.content.Context import android.content.pm.PackageManager import androidx.core.content.ContextCompat -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.permissions.api.PermissionStateProvider import io.element.android.libraries.permissions.api.PermissionsStore import kotlinx.coroutines.flow.Flow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultPermissionStateProvider @Inject constructor( +@Inject +class DefaultPermissionStateProvider( @ApplicationContext private val context: Context, private val permissionsStore: PermissionsStore, ) : PermissionStateProvider { diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenter.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenter.kt index e9072e3666..021810e5e6 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenter.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenter.kt @@ -21,12 +21,12 @@ import com.google.accompanist.permissions.PermissionState import com.google.accompanist.permissions.PermissionStatus import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.shouldShowRationale -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.log.logger.LoggerTag -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.permissions.api.PermissionsEvents import io.element.android.libraries.permissions.api.PermissionsPresenter import io.element.android.libraries.permissions.api.PermissionsState @@ -37,7 +37,8 @@ import timber.log.Timber private val loggerTag = LoggerTag("DefaultPermissionsPresenter") -class DefaultPermissionsPresenter @AssistedInject constructor( +@Inject +class DefaultPermissionsPresenter( @Assisted val permission: String, private val permissionsStore: PermissionsStore, private val composablePermissionStateProvider: ComposablePermissionStateProvider, diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsStore.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsStore.kt index 4d55e6b9f9..bd495b1d4b 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsStore.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsStore.kt @@ -9,17 +9,18 @@ package io.element.android.libraries.permissions.impl import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.bool.orFalse -import io.element.android.libraries.di.AppScope import io.element.android.libraries.permissions.api.PermissionsStore import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import javax.inject.Inject @ContributesBinding(AppScope::class) -class DefaultPermissionsStore @Inject constructor( +@Inject +class DefaultPermissionsStore( preferenceDataStoreFactory: PreferenceDataStoreFactory, ) : PermissionsStore { private val store = preferenceDataStoreFactory.create("permissions_store") diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/action/AndroidPermissionActions.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/action/AndroidPermissionActions.kt index 1778f0e39a..b78863a53e 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/action/AndroidPermissionActions.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/action/AndroidPermissionActions.kt @@ -8,14 +8,15 @@ package io.element.android.libraries.permissions.impl.action import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.system.startNotificationSettingsIntent -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class AndroidPermissionActions @Inject constructor( +@Inject +class AndroidPermissionActions( @ApplicationContext private val context: Context ) : PermissionActions { override fun openSettings() { diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/troubleshoot/NotificationTroubleshootCheckPermissionTest.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/troubleshoot/NotificationTroubleshootCheckPermissionTest.kt index c819c40bb7..1753e94422 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/troubleshoot/NotificationTroubleshootCheckPermissionTest.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/troubleshoot/NotificationTroubleshootCheckPermissionTest.kt @@ -9,8 +9,8 @@ package io.element.android.libraries.permissions.impl.troubleshoot import android.Manifest import android.os.Build -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.AppScope import io.element.android.libraries.permissions.api.PermissionStateProvider import io.element.android.libraries.permissions.impl.R import io.element.android.libraries.permissions.impl.action.PermissionActions @@ -21,10 +21,11 @@ import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject -@ContributesMultibinding(AppScope::class) -class NotificationTroubleshootCheckPermissionTest @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class NotificationTroubleshootCheckPermissionTest( private val permissionStateProvider: PermissionStateProvider, private val sdkVersionProvider: BuildVersionSdkIntProvider, private val permissionActions: PermissionActions, diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultAppPreferencesStore.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultAppPreferencesStore.kt index 453b1304f3..b3890a8a7d 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultAppPreferencesStore.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultAppPreferencesStore.kt @@ -10,10 +10,11 @@ package io.element.android.libraries.preferences.impl.store import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.stringPreferencesKey -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType -import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.media.MediaPreviewValue import io.element.android.libraries.matrix.api.tracing.LogLevel import io.element.android.libraries.matrix.api.tracing.TraceLogPack @@ -21,7 +22,6 @@ import io.element.android.libraries.preferences.api.store.AppPreferencesStore import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import javax.inject.Inject private val developerModeKey = booleanPreferencesKey("developerMode") private val customElementCallBaseUrlKey = stringPreferencesKey("elementCallBaseUrl") @@ -32,7 +32,8 @@ private val logLevelKey = stringPreferencesKey("logLevel") private val traceLogPacksKey = stringPreferencesKey("traceLogPacks") @ContributesBinding(AppScope::class) -class DefaultAppPreferencesStore @Inject constructor( +@Inject +class DefaultAppPreferencesStore( private val buildMeta: BuildMeta, preferenceDataStoreFactory: PreferenceDataStoreFactory, ) : AppPreferencesStore { diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt index f2631e4a3a..525b9372b2 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt @@ -11,18 +11,19 @@ import android.content.Context import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.preferencesDataStore -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.androidutils.preferences.DefaultPreferencesCorruptionHandlerFactory -import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import java.util.concurrent.ConcurrentHashMap -import javax.inject.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultPreferencesDataStoreFactory @Inject constructor( +@Inject +class DefaultPreferencesDataStoreFactory( @ApplicationContext private val context: Context, ) : PreferenceDataStoreFactory { private val dataStoreHolders = ConcurrentHashMap() diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt index 3f137feb68..80999f1abd 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.preferences.impl.store import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.preferences.api.store.SessionPreferencesStoreFactory @@ -19,11 +19,12 @@ import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver import kotlinx.coroutines.CoroutineScope import java.util.concurrent.ConcurrentHashMap -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultSessionPreferencesStoreFactory @Inject constructor( +@Inject +class DefaultSessionPreferencesStoreFactory( @ApplicationContext private val context: Context, sessionObserver: SessionObserver, ) : SessionPreferencesStoreFactory { 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/SessionPreferencesModule.kt index 027c807d45..d9621cd6e0 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/SessionPreferencesModule.kt @@ -7,16 +7,16 @@ package io.element.android.libraries.preferences.impl.store -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.user.CurrentSessionIdHolder import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import kotlinx.coroutines.CoroutineScope -@Module +@BindingContainer @ContributesTo(SessionScope::class) object SessionPreferencesModule { @Provides diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultGetCurrentPushProvider.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultGetCurrentPushProvider.kt index e0948c7972..fa22065737 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultGetCurrentPushProvider.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultGetCurrentPushProvider.kt @@ -7,16 +7,17 @@ package io.element.android.libraries.push.impl -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.api.GetCurrentPushProvider import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.services.appnavstate.api.AppNavigationStateService import io.element.android.services.appnavstate.api.currentSessionId -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultGetCurrentPushProvider @Inject constructor( +@Inject +class DefaultGetCurrentPushProvider( private val pushStoreFactory: UserPushStoreFactory, private val appNavigationStateService: AppNavigationStateService, ) : GetCurrentPushProvider { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt index d628f7153e..5397e86a7a 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.push.impl -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.api.GetCurrentPushProvider @@ -26,11 +26,13 @@ import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver import kotlinx.coroutines.flow.Flow import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding -@ContributesBinding(AppScope::class, boundType = PushService::class) +@ContributesBinding(AppScope::class, binding = binding()) @SingleIn(AppScope::class) -class DefaultPushService @Inject constructor( +@Inject +class DefaultPushService( private val testPush: TestPush, private val userPushStoreFactory: UserPushStoreFactory, private val pushProviders: Set<@JvmSuppressWildcards PushProvider>, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriber.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriber.kt index 13653db244..208c7e2a94 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriber.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriber.kt @@ -7,12 +7,12 @@ package io.element.android.libraries.push.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.PushConfig import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.exception.ClientException @@ -23,14 +23,15 @@ import io.element.android.libraries.pushproviders.api.RegistrationFailure import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject internal const val DEFAULT_PUSHER_FILE_TAG = "mobile" private val loggerTag = LoggerTag("DefaultPusherSubscriber", LoggerTag.PushLoggerTag) @ContributesBinding(AppScope::class) -class DefaultPusherSubscriber @Inject constructor( +@Inject +class DefaultPusherSubscriber( private val buildMeta: BuildMeta, private val pushClientSecret: PushClientSecret, private val userPushStoreFactory: UserPushStoreFactory, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimization.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimization.kt index 4087a2e798..6bb24d4a02 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimization.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimization.kt @@ -15,12 +15,12 @@ import android.os.PowerManager import android.provider.Settings import androidx.core.content.getSystemService import androidx.core.net.toUri -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.toolbox.api.intent.ExternalIntentLauncher import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface BatteryOptimization { /** @@ -45,7 +45,8 @@ interface BatteryOptimization { } @ContributesBinding(AppScope::class) -class AndroidBatteryOptimization @Inject constructor( +@Inject +class AndroidBatteryOptimization( @ApplicationContext private val context: Context, private val externalIntentLauncher: ExternalIntentLauncher, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimizationPresenter.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimizationPresenter.kt index 9fa17f0544..88d2105f37 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimizationPresenter.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimizationPresenter.kt @@ -21,9 +21,10 @@ import io.element.android.libraries.push.api.battery.BatteryOptimizationState import io.element.android.libraries.push.impl.push.MutableBatteryOptimizationStore import io.element.android.libraries.push.impl.store.PushDataStore import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class BatteryOptimizationPresenter @Inject constructor( +@Inject +class BatteryOptimizationPresenter( private val pushDataStore: PushDataStore, private val mutableBatteryOptimizationStore: MutableBatteryOptimizationStore, private val batteryOptimization: BatteryOptimization, 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/PushModule.kt index bb8b7e1624..0c350ade50 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/PushModule.kt @@ -9,17 +9,17 @@ package io.element.android.libraries.push.impl.di import android.content.Context import androidx.core.app.NotificationManagerCompat -import com.squareup.anvil.annotations.ContributesTo -import dagger.Binds -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.push.api.battery.BatteryOptimizationState import io.element.android.libraries.push.impl.battery.BatteryOptimizationPresenter -@Module +@BindingContainer @ContributesTo(AppScope::class) interface PushModule { companion object { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/DefaultPushHistoryService.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/DefaultPushHistoryService.kt index 23ae48ea31..cbbcfcdaae 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/DefaultPushHistoryService.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/DefaultPushHistoryService.kt @@ -11,19 +11,20 @@ import android.content.Context import android.os.Build import android.os.PowerManager import androidx.core.content.getSystemService -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.impl.PushDatabase import io.element.android.libraries.push.impl.db.PushHistory import io.element.android.services.toolbox.api.systemclock.SystemClock -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultPushHistoryService @Inject constructor( +@Inject +class DefaultPushHistoryService( private val pushDatabase: PushDatabase, private val systemClock: SystemClock, @ApplicationContext context: 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/PushHistoryModule.kt index 248ba8182d..f730568d0c 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/PushHistoryModule.kt @@ -8,17 +8,17 @@ package io.element.android.libraries.push.impl.history.di import android.content.Context -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.push.impl.PushDatabase import io.element.encrypteddb.SqlCipherDriverFactory import io.element.encrypteddb.passphrase.RandomSecretPassphraseProvider -@Module +@BindingContainer @ContributesTo(AppScope::class) object PushHistoryModule { @Provides diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ActiveNotificationsProvider.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ActiveNotificationsProvider.kt index 9b8db9d082..e6df308da5 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ActiveNotificationsProvider.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ActiveNotificationsProvider.kt @@ -9,14 +9,14 @@ package io.element.android.libraries.push.impl.notifications import android.service.notification.StatusBarNotification import androidx.core.app.NotificationManagerCompat -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.api.notifications.NotificationIdProvider import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface ActiveNotificationsProvider { fun getMessageNotificationsForRoom(sessionId: SessionId, roomId: RoomId): List @@ -28,7 +28,8 @@ interface ActiveNotificationsProvider { } @ContributesBinding(AppScope::class) -class DefaultActiveNotificationsProvider @Inject constructor( +@Inject +class DefaultActiveNotificationsProvider( private val notificationManager: NotificationManagerCompat, ) : ActiveNotificationsProvider { override fun getNotificationsForSession(sessionId: SessionId): List { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt index 4dcb2debc0..1cd23004ad 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.push.impl.notifications -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.exception.NotificationResolverException @@ -25,7 +25,7 @@ import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.withTimeoutOrNull import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds /** @@ -47,7 +47,8 @@ interface CallNotificationEventResolver { } @ContributesBinding(AppScope::class) -class DefaultCallNotificationEventResolver @Inject constructor( +@Inject +class DefaultCallNotificationEventResolver( private val stringProvider: StringProvider, private val appForegroundStateService: AppForegroundStateService, private val clientProvider: MatrixClientProvider, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt index 00af4881e9..251fe5a703 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt @@ -10,13 +10,13 @@ package io.element.android.libraries.push.impl.notifications import android.content.Context import android.net.Uri import androidx.core.content.FileProvider -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.log.logger.LoggerTag -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.EventId @@ -50,7 +50,7 @@ import io.element.android.libraries.push.impl.notifications.model.ResolvedPushEv import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("DefaultNotifiableEventResolver", LoggerTag.NotificationLoggerTag) @@ -77,7 +77,8 @@ interface NotifiableEventResolver { @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class DefaultNotifiableEventResolver @Inject constructor( +@Inject +class DefaultNotifiableEventResolver( private val stringProvider: StringProvider, private val matrixClientProvider: MatrixClientProvider, private val notificationMediaRepoFactory: NotificationMediaRepo.Factory, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationBitmapLoader.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationBitmapLoader.kt index d7d02f765c..528fb60f45 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationBitmapLoader.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationBitmapLoader.kt @@ -16,19 +16,20 @@ import coil3.request.ImageRequest import coil3.request.transformations import coil3.toBitmap import coil3.transform.CircleCropTransformation -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.ui.media.AVATAR_THUMBNAIL_SIZE_IN_PIXEL import io.element.android.libraries.matrix.ui.media.MediaRequestData import io.element.android.libraries.push.api.notifications.NotificationBitmapLoader import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultNotificationBitmapLoader @Inject constructor( +@Inject +class DefaultNotificationBitmapLoader( @ApplicationContext private val context: Context, private val sdkIntProvider: BuildVersionSdkIntProvider, ) : NotificationBitmapLoader { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt index e50536b313..8f2c7944de 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt @@ -9,11 +9,11 @@ package io.element.android.libraries.push.impl.notifications import androidx.annotation.VisibleForTesting import androidx.core.app.NotificationManagerCompat -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.core.log.logger.LoggerTag -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClientProvider @@ -34,7 +34,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("DefaultNotificationDrawerManager", LoggerTag.NotificationLoggerTag) @@ -45,7 +45,8 @@ private val loggerTag = LoggerTag("DefaultNotificationDrawerManager", LoggerTag. */ @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultNotificationDrawerManager @Inject constructor( +@Inject +class DefaultNotificationDrawerManager( private val notificationManager: NotificationManagerCompat, private val notificationRenderer: NotificationRenderer, private val appNavigationStateService: AppNavigationStateService, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt index d65df65693..c557b06c9a 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt @@ -7,17 +7,18 @@ package io.element.android.libraries.push.impl.notifications -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.api.notifications.OnMissedCallNotificationHandler -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultOnMissedCallNotificationHandler @Inject constructor( +@Inject +class DefaultOnMissedCallNotificationHandler( private val matrixClientProvider: MatrixClientProvider, private val defaultNotificationDrawerManager: DefaultNotificationDrawerManager, private val callNotificationEventResolver: CallNotificationEventResolver, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt index 8e206335b9..bb56fbe58f 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt @@ -14,9 +14,10 @@ import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.model.FallbackNotifiableEvent import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class FallbackNotificationFactory @Inject constructor( +@Inject +class FallbackNotificationFactory( private val clock: SystemClock, private val stringProvider: StringProvider, ) { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationActionIds.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationActionIds.kt index 9f8954cf38..2ed72ba4d4 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationActionIds.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationActionIds.kt @@ -8,12 +8,13 @@ package io.element.android.libraries.push.impl.notifications import io.element.android.libraries.core.meta.BuildMeta -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Util class for creating notifications action Ids, using the application id. */ -data class NotificationActionIds @Inject constructor( +data @Inject +class NotificationActionIds( private val buildMeta: BuildMeta, ) { val join = "${buildMeta.applicationId}.NotificationActions.JOIN_ACTION" diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt index f72b44187b..b8913911f4 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt @@ -11,7 +11,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import io.element.android.libraries.architecture.bindings -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Receives actions broadcast by notification (on click, on dismiss, inline replies, etc.). diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverBindings.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverBindings.kt index 594a8b2ce5..07643eaf84 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverBindings.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverBindings.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.push.impl.notifications -import com.squareup.anvil.annotations.ContributesTo -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) interface NotificationBroadcastReceiverBindings { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandler.kt index b664991dfb..3c9b158ff5 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandler.kt @@ -31,11 +31,12 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import timber.log.Timber import java.util.UUID -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("NotificationBroadcastReceiverHandler", LoggerTag.NotificationLoggerTag) -class NotificationBroadcastReceiverHandler @Inject constructor( +@Inject +class NotificationBroadcastReceiverHandler( @AppCoroutineScope private val appCoroutineScope: CoroutineScope, private val matrixClientProvider: MatrixClientProvider, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDataFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDataFactory.kt index 52c633820b..3b1fc587a3 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDataFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDataFactory.kt @@ -13,8 +13,8 @@ import android.text.style.StyleSpan import androidx.core.text.buildSpannedString import androidx.core.text.inSpans import coil3.ImageLoader -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.user.MatrixUser @@ -25,7 +25,7 @@ import io.element.android.libraries.push.impl.notifications.model.InviteNotifiab import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.libraries.push.impl.notifications.model.SimpleNotifiableEvent import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface NotificationDataFactory { suspend fun toNotifications( @@ -54,7 +54,8 @@ interface NotificationDataFactory { } @ContributesBinding(AppScope::class) -class DefaultNotificationDataFactory @Inject constructor( +@Inject +class DefaultNotificationDataFactory( private val notificationCreator: NotificationCreator, private val roomGroupMessageCreator: RoomGroupMessageCreator, private val summaryGroupMessageCreator: SummaryGroupMessageCreator, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDisplayer.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDisplayer.kt index 88e6021cc4..16671653a5 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDisplayer.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDisplayer.kt @@ -13,11 +13,11 @@ import android.content.Context import android.content.pm.PackageManager import androidx.core.app.ActivityCompat import androidx.core.app.NotificationManagerCompat -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface NotificationDisplayer { fun showNotificationMessage(tag: String?, id: Int, notification: Notification): Boolean @@ -27,7 +27,8 @@ interface NotificationDisplayer { } @ContributesBinding(AppScope::class) -class DefaultNotificationDisplayer @Inject constructor( +@Inject +class DefaultNotificationDisplayer( @ApplicationContext private val context: Context, private val notificationManager: NotificationManagerCompat ) : NotificationDisplayer { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationMediaRepo.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationMediaRepo.kt index 5483c76578..1be443281c 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationMediaRepo.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationMediaRepo.kt @@ -7,12 +7,13 @@ package io.element.android.libraries.push.impl.notifications -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Named import io.element.android.libraries.core.extensions.mapCatchingExceptions -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.media.MediaSource @@ -58,8 +59,9 @@ interface NotificationMediaRepo { ): Result } -class DefaultNotificationMediaRepo @AssistedInject constructor( - @CacheDirectory private val cacheDir: File, +@Inject +class DefaultNotificationMediaRepo( + @Named("cacheDirectory") private val cacheDir: File, private val mxcTools: MxcTools, @Assisted private val client: MatrixClient, ) : NotificationMediaRepo { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt index 79d127b009..225ec7bef6 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt @@ -18,11 +18,12 @@ import io.element.android.libraries.push.impl.notifications.model.NotifiableMess import io.element.android.libraries.push.impl.notifications.model.NotifiableRingingCallEvent import io.element.android.libraries.push.impl.notifications.model.SimpleNotifiableEvent import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("NotificationRenderer", LoggerTag.NotificationLoggerTag) -class NotificationRenderer @Inject constructor( +@Inject +class NotificationRenderer( private val notificationDisplayer: NotificationDisplayer, private val notificationDataFactory: NotificationDataFactory, ) { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationResolverQueue.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationResolverQueue.kt index a3ba36cfe8..f2f6329616 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationResolverQueue.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationResolverQueue.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.push.impl.notifications -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId @@ -24,7 +24,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.milliseconds /** @@ -33,7 +33,8 @@ import kotlin.time.Duration.Companion.milliseconds */ @OptIn(ExperimentalCoroutinesApi::class) @SingleIn(AppScope::class) -class NotificationResolverQueue @Inject constructor( +@Inject +class NotificationResolverQueue( private val notifiableEventResolver: NotifiableEventResolver, @AppCoroutineScope private val appCoroutineScope: CoroutineScope, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt index 9af2eb9f13..51a2fd334b 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt @@ -9,16 +9,17 @@ package io.element.android.libraries.push.impl.notifications import android.content.Intent import androidx.core.app.RemoteInput -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface ReplyMessageExtractor { fun getReplyMessage(intent: Intent): String? } @ContributesBinding(AppScope::class) -class AndroidReplyMessageExtractor @Inject constructor() : ReplyMessageExtractor { +@Inject +class AndroidReplyMessageExtractor() : ReplyMessageExtractor { override fun getReplyMessage(intent: Intent): String? { return RemoteInput.getResultsFromIntent(intent) ?.getCharSequence(NotificationBroadcastReceiver.KEY_TEXT_REPLY) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt index 3e8ddb8798..ec65f4b20b 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt @@ -10,8 +10,8 @@ package io.element.android.libraries.push.impl.notifications import android.app.Notification import android.graphics.Bitmap import coil3.ImageLoader -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.push.api.notifications.NotificationBitmapLoader @@ -20,7 +20,7 @@ import io.element.android.libraries.push.impl.notifications.factories.Notificati import io.element.android.libraries.push.impl.notifications.factories.isSmartReplyError import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface RoomGroupMessageCreator { suspend fun createRoomMessage( @@ -33,7 +33,8 @@ interface RoomGroupMessageCreator { } @ContributesBinding(AppScope::class) -class DefaultRoomGroupMessageCreator @Inject constructor( +@Inject +class DefaultRoomGroupMessageCreator( private val bitmapLoader: NotificationBitmapLoader, private val stringProvider: StringProvider, private val notificationCreator: NotificationCreator, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/SummaryGroupMessageCreator.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/SummaryGroupMessageCreator.kt index cc71d8c122..b27e167a1d 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/SummaryGroupMessageCreator.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/SummaryGroupMessageCreator.kt @@ -8,13 +8,13 @@ package io.element.android.libraries.push.impl.notifications import android.app.Notification -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.factories.NotificationCreator import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface SummaryGroupMessageCreator { fun createSummaryNotification( @@ -36,7 +36,8 @@ interface SummaryGroupMessageCreator { * https://developer.android.com/training/notify-user/group */ @ContributesBinding(AppScope::class) -class DefaultSummaryGroupMessageCreator @Inject constructor( +@Inject +class DefaultSummaryGroupMessageCreator( private val stringProvider: StringProvider, private val notificationCreator: NotificationCreator, ) : SummaryGroupMessageCreator { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiver.kt index e78b618b80..c4f2c063e7 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiver.kt @@ -12,7 +12,7 @@ import android.content.Context import android.content.Intent import io.element.android.libraries.architecture.bindings import io.element.android.libraries.push.impl.troubleshoot.NotificationClickHandler -import javax.inject.Inject +import dev.zacsweers.metro.Inject class TestNotificationReceiver : BroadcastReceiver() { @Inject lateinit var notificationClickHandler: NotificationClickHandler diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiverBinding.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiverBinding.kt index ddacda354c..771c48ddd5 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiverBinding.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiverBinding.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.push.impl.notifications -import com.squareup.anvil.annotations.ContributesTo -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) interface TestNotificationReceiverBinding { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannels.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannels.kt index e707f3ad51..9a66872f9e 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannels.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannels.kt @@ -14,13 +14,13 @@ import android.provider.Settings import androidx.annotation.ChecksSdkIntAtLeast import androidx.core.app.NotificationChannelCompat import androidx.core.app.NotificationManagerCompat -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.NotificationConfig -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.push.impl.R import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject /* ========================================================================================== * IDs for channels @@ -57,7 +57,8 @@ private fun supportNotificationChannels() = Build.VERSION.SDK_INT >= Build.VERSI @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultNotificationChannels @Inject constructor( +@Inject +class DefaultNotificationChannels( private val notificationManager: NotificationManagerCompat, private val stringProvider: StringProvider, ) : NotificationChannels { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/conversations/DefaultNotificationConversationService.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/conversations/DefaultNotificationConversationService.kt index 9fbb67c08c..48d5d832db 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/conversations/DefaultNotificationConversationService.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/conversations/DefaultNotificationConversationService.kt @@ -14,15 +14,15 @@ import android.os.Build import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.libraries.core.coroutine.withPreviousValue import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.RoomId @@ -40,11 +40,12 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultNotificationConversationService @Inject constructor( +@Inject +class DefaultNotificationConversationService( @ApplicationContext private val context: Context, private val intentProvider: IntentProvider, private val bitmapLoader: NotificationBitmapLoader, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt index d462ebb5f6..6eebccfea7 100755 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt @@ -17,12 +17,12 @@ import androidx.core.app.NotificationCompat.MessagingStyle import androidx.core.app.Person import androidx.core.content.res.ResourcesCompat import coil3.ImageLoader -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.utils.CommonDrawables -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.timeline.item.event.EventType @@ -41,7 +41,7 @@ import io.element.android.libraries.push.impl.notifications.model.InviteNotifiab import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.libraries.push.impl.notifications.model.SimpleNotifiableEvent import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface NotificationCreator { /** @@ -85,7 +85,8 @@ interface NotificationCreator { } @ContributesBinding(AppScope::class) -class DefaultNotificationCreator @Inject constructor( +@Inject +class DefaultNotificationCreator( @ApplicationContext private val context: Context, private val notificationChannels: NotificationChannels, private val stringProvider: StringProvider, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt index 108d671fd3..3251fae9b3 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt @@ -11,7 +11,7 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import io.element.android.libraries.androidutils.uri.createIgnoredUri -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -22,9 +22,10 @@ import io.element.android.libraries.push.impl.notifications.NotificationBroadcas import io.element.android.libraries.push.impl.notifications.RoomEventGroupInfo import io.element.android.libraries.push.impl.notifications.TestNotificationReceiver import io.element.android.services.toolbox.api.systemclock.SystemClock -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PendingIntentFactory @Inject constructor( +@Inject +class PendingIntentFactory( @ApplicationContext private val context: Context, private val intentProvider: IntentProvider, private val clock: SystemClock, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/AcceptInvitationActionFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/AcceptInvitationActionFactory.kt index 2d20a766bb..44efab5692 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/AcceptInvitationActionFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/AcceptInvitationActionFactory.kt @@ -13,7 +13,7 @@ import android.content.Intent import androidx.core.app.NotificationCompat import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.androidutils.uri.createIgnoredUri -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.NotificationActionIds import io.element.android.libraries.push.impl.notifications.NotificationBroadcastReceiver @@ -21,9 +21,10 @@ import io.element.android.libraries.push.impl.notifications.model.InviteNotifiab import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class AcceptInvitationActionFactory @Inject constructor( +@Inject +class AcceptInvitationActionFactory( @ApplicationContext private val context: Context, private val actionIds: NotificationActionIds, private val stringProvider: StringProvider, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/MarkAsReadActionFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/MarkAsReadActionFactory.kt index 68dbb96078..d99fde4da1 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/MarkAsReadActionFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/MarkAsReadActionFactory.kt @@ -13,16 +13,17 @@ import android.content.Intent import androidx.core.app.NotificationCompat import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.androidutils.uri.createIgnoredUri -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.NotificationActionIds import io.element.android.libraries.push.impl.notifications.NotificationBroadcastReceiver import io.element.android.libraries.push.impl.notifications.RoomEventGroupInfo import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class MarkAsReadActionFactory @Inject constructor( +@Inject +class MarkAsReadActionFactory( @ApplicationContext private val context: Context, private val actionIds: NotificationActionIds, private val stringProvider: StringProvider, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt index 6a590aeda8..0472f07030 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt @@ -15,7 +15,7 @@ import androidx.core.app.NotificationCompat import androidx.core.app.RemoteInput import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.androidutils.uri.createIgnoredUri -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -26,9 +26,10 @@ import io.element.android.libraries.push.impl.notifications.NotificationBroadcas import io.element.android.libraries.push.impl.notifications.RoomEventGroupInfo import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class QuickReplyActionFactory @Inject constructor( +@Inject +class QuickReplyActionFactory( @ApplicationContext private val context: Context, private val actionIds: NotificationActionIds, private val stringProvider: StringProvider, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/RejectInvitationActionFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/RejectInvitationActionFactory.kt index 259e88b2b8..d761f01c66 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/RejectInvitationActionFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/RejectInvitationActionFactory.kt @@ -13,7 +13,7 @@ import android.content.Intent import androidx.core.app.NotificationCompat import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.androidutils.uri.createIgnoredUri -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.NotificationActionIds import io.element.android.libraries.push.impl.notifications.NotificationBroadcastReceiver @@ -21,9 +21,10 @@ import io.element.android.libraries.push.impl.notifications.model.InviteNotifiab import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class RejectInvitationActionFactory @Inject constructor( +@Inject +class RejectInvitationActionFactory( @ApplicationContext private val context: Context, private val actionIds: NotificationActionIds, private val stringProvider: StringProvider, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt index 6967692a46..6145b6ef08 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt @@ -7,13 +7,13 @@ package io.element.android.libraries.push.impl.push -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.call.api.CallType import io.element.android.features.call.api.ElementCallEntryPoint import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.exception.NotificationResolverException @@ -43,13 +43,14 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("PushHandler", LoggerTag.PushLoggerTag) @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultPushHandler @Inject constructor( +@Inject +class DefaultPushHandler( private val onNotifiableEventReceived: OnNotifiableEventReceived, private val onRedactedEventReceived: OnRedactedEventReceived, private val incrementPushDataStore: IncrementPushDataStore, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/IncrementPushDataStore.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/IncrementPushDataStore.kt index bc4cdd8831..38a8d372ce 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/IncrementPushDataStore.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/IncrementPushDataStore.kt @@ -7,17 +7,18 @@ package io.element.android.libraries.push.impl.push -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.impl.store.DefaultPushDataStore -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface IncrementPushDataStore { suspend fun incrementPushCounter() } @ContributesBinding(AppScope::class) -class DefaultIncrementPushDataStore @Inject constructor( +@Inject +class DefaultIncrementPushDataStore( private val defaultPushDataStore: DefaultPushDataStore ) : IncrementPushDataStore { override suspend fun incrementPushCounter() { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/MutableBatteryOptimizationStore.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/MutableBatteryOptimizationStore.kt index 14e2cfd97b..1c984a8ec5 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/MutableBatteryOptimizationStore.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/MutableBatteryOptimizationStore.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.push.impl.push -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.impl.store.DefaultPushDataStore -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface MutableBatteryOptimizationStore { suspend fun showBatteryOptimizationBanner() @@ -19,7 +19,8 @@ interface MutableBatteryOptimizationStore { } @ContributesBinding(AppScope::class) -class DefaultMutableBatteryOptimizationStore @Inject constructor( +@Inject +class DefaultMutableBatteryOptimizationStore( private val defaultPushDataStore: DefaultPushDataStore, ) : MutableBatteryOptimizationStore { override suspend fun showBatteryOptimizationBanner() { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt index b311aab4e2..2732f6a402 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt @@ -7,22 +7,23 @@ package io.element.android.libraries.push.impl.push -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.push.impl.notifications.DefaultNotificationDrawerManager import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent import io.element.android.libraries.push.impl.notifications.model.NotifiableRingingCallEvent import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface OnNotifiableEventReceived { fun onNotifiableEventsReceived(notifiableEvents: List) } @ContributesBinding(AppScope::class) -class DefaultOnNotifiableEventReceived @Inject constructor( +@Inject +class DefaultOnNotifiableEventReceived( private val defaultNotificationDrawerManager: DefaultNotificationDrawerManager, @AppCoroutineScope private val coroutineScope: CoroutineScope, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnRedactedEventReceived.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnRedactedEventReceived.kt index 991baba404..a0ab66705f 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnRedactedEventReceived.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnRedactedEventReceived.kt @@ -14,9 +14,9 @@ import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat.MessagingStyle import androidx.core.text.buildSpannedString import androidx.core.text.inSpans -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.push.impl.notifications.ActiveNotificationsProvider import io.element.android.libraries.push.impl.notifications.NotificationDisplayer @@ -27,14 +27,15 @@ import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface OnRedactedEventReceived { fun onRedactedEventsReceived(redactions: List) } @ContributesBinding(AppScope::class) -class DefaultOnRedactedEventReceived @Inject constructor( +@Inject +class DefaultOnRedactedEventReceived( private val activeNotificationsProvider: ActiveNotificationsProvider, private val notificationDisplayer: NotificationDisplayer, @AppCoroutineScope diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt index 57c004ce23..d6427fdcf2 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt @@ -16,10 +16,11 @@ import io.element.android.services.appnavstate.api.AppForegroundStateService import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds -class SyncOnNotifiableEvent @Inject constructor( +@Inject +class SyncOnNotifiableEvent( private val matrixClientProvider: MatrixClientProvider, private val featureFlagService: FeatureFlagService, private val appForegroundStateService: AppForegroundStateService, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayApiFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayApiFactory.kt index 7d92ea2b49..3fbaa6f34d 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayApiFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayApiFactory.kt @@ -7,17 +7,18 @@ package io.element.android.libraries.push.impl.pushgateway -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.network.RetrofitFactory -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface PushGatewayApiFactory { fun create(baseUrl: String): PushGatewayAPI } @ContributesBinding(AppScope::class) -class DefaultPushGatewayApiFactory @Inject constructor( +@Inject +class DefaultPushGatewayApiFactory( private val retrofitFactory: RetrofitFactory, ) : PushGatewayApiFactory { override fun create(baseUrl: String): PushGatewayAPI { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayNotifyRequest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayNotifyRequest.kt index 5e64ae17fc..4d7d332170 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayNotifyRequest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayNotifyRequest.kt @@ -6,12 +6,12 @@ */ package io.element.android.libraries.push.impl.pushgateway -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.push.api.gateway.PushGatewayFailure -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface PushGatewayNotifyRequest { data class Params( @@ -26,7 +26,8 @@ interface PushGatewayNotifyRequest { } @ContributesBinding(AppScope::class) -class DefaultPushGatewayNotifyRequest @Inject constructor( +@Inject +class DefaultPushGatewayNotifyRequest( private val pushGatewayApiFactory: PushGatewayApiFactory, ) : PushGatewayNotifyRequest { override suspend fun execute(params: PushGatewayNotifyRequest.Params) { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/store/DefaultPushDataStore.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/store/DefaultPushDataStore.kt index 2f67e04b3d..e84ffaf7f0 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/store/DefaultPushDataStore.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/store/DefaultPushDataStore.kt @@ -11,11 +11,12 @@ import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.intPreferencesKey import app.cash.sqldelight.coroutines.asFlow import app.cash.sqldelight.coroutines.mapToList -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.api.DateFormatterMode -import io.element.android.libraries.di.AppScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -27,10 +28,10 @@ import io.element.android.libraries.push.impl.store.DefaultPushDataStore.Compani import io.element.android.libraries.push.impl.store.DefaultPushDataStore.Companion.BATTERY_OPTIMIZATION_BANNER_STATE_SHOW import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import javax.inject.Inject @ContributesBinding(AppScope::class) -class DefaultPushDataStore @Inject constructor( +@Inject +class DefaultPushDataStore( private val pushDatabase: PushDatabase, private val dateFormatter: DateFormatter, private val dispatchers: CoroutineDispatchers, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/test/TestPush.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/test/TestPush.kt index 08e725d712..30158068cb 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/test/TestPush.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/test/TestPush.kt @@ -7,21 +7,22 @@ package io.element.android.libraries.push.impl.test -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.PushConfig -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.push.impl.pushgateway.PushGatewayNotifyRequest import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface TestPush { suspend fun execute(config: CurrentUserPushConfig) } @ContributesBinding(AppScope::class) -class DefaultTestPush @Inject constructor( +@Inject +class DefaultTestPush( private val pushGatewayNotifyRequest: PushGatewayNotifyRequest, ) : TestPush { override suspend fun execute(config: CurrentUserPushConfig) { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/CurrentPushProviderTest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/CurrentPushProviderTest.kt index 159ffa16f7..1fd8040d54 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/CurrentPushProviderTest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/CurrentPushProviderTest.kt @@ -7,8 +7,9 @@ package io.element.android.libraries.push.impl.troubleshoot -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.api.GetCurrentPushProvider import io.element.android.libraries.push.impl.R import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTest @@ -17,10 +18,10 @@ import io.element.android.libraries.troubleshoot.api.test.NotificationTroublesho import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow -import javax.inject.Inject -@ContributesMultibinding(AppScope::class) -class CurrentPushProviderTest @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class CurrentPushProviderTest( private val getCurrentPushProvider: GetCurrentPushProvider, private val stringProvider: StringProvider, ) : NotificationTroubleshootTest { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt index 51c1ee525e..d7d47c1aaf 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt @@ -7,14 +7,15 @@ package io.element.android.libraries.push.impl.troubleshoot -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) -class DiagnosticPushHandler @Inject constructor() { +@Inject +class DiagnosticPushHandler() { private val _state = MutableSharedFlow() val state: SharedFlow = _state diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt index aa796d10bf..b599cdf5d1 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt @@ -7,14 +7,15 @@ package io.element.android.libraries.push.impl.troubleshoot -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) -class NotificationClickHandler @Inject constructor() { +@Inject +class NotificationClickHandler() { private val _state = MutableSharedFlow(extraBufferCapacity = 1) val state: SharedFlow = _state diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt index ee140e7f6c..d8c87e60b7 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt @@ -7,8 +7,9 @@ package io.element.android.libraries.push.impl.troubleshoot -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.NotificationDisplayer import io.element.android.libraries.push.impl.notifications.factories.NotificationCreator @@ -22,11 +23,11 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.withTimeout import timber.log.Timber -import javax.inject.Inject import kotlin.time.Duration.Companion.seconds -@ContributesMultibinding(AppScope::class) -class NotificationTest @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class NotificationTest( private val notificationCreator: NotificationCreator, private val notificationDisplayer: NotificationDisplayer, private val notificationClickHandler: NotificationClickHandler, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt index 3f392a3a17..4324ffd19f 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt @@ -7,8 +7,9 @@ package io.element.android.libraries.push.impl.troubleshoot -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.api.PushService import io.element.android.libraries.push.api.gateway.PushGatewayFailure import io.element.android.libraries.push.impl.R @@ -24,11 +25,11 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.withTimeout import timber.log.Timber -import javax.inject.Inject import kotlin.time.Duration.Companion.seconds -@ContributesMultibinding(AppScope::class) -class PushLoopbackTest @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class PushLoopbackTest( private val pushService: PushService, private val diagnosticPushHandler: DiagnosticPushHandler, private val clock: SystemClock, diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushProvidersTest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushProvidersTest.kt index 5a30db6f59..09eccddedd 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushProvidersTest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushProvidersTest.kt @@ -7,8 +7,9 @@ package io.element.android.libraries.push.impl.troubleshoot -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.impl.R import io.element.android.libraries.pushproviders.api.PushProvider import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTest @@ -17,10 +18,10 @@ import io.element.android.libraries.troubleshoot.api.test.NotificationTroublesho import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow -import javax.inject.Inject -@ContributesMultibinding(AppScope::class) -class PushProvidersTest @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class PushProvidersTest( pushProviders: Set<@JvmSuppressWildcards PushProvider>, private val stringProvider: StringProvider, ) : NotificationTroubleshootTest { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt index 2b378766bc..bf36ba97d7 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt @@ -7,17 +7,18 @@ package io.element.android.libraries.pushproviders.firebase -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.enterprise.api.EnterpriseService -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface FirebaseGatewayProvider { fun getFirebaseGateway(): String } @ContributesBinding(AppScope::class) -class DefaultFirebaseGatewayProvider @Inject constructor( +@Inject +class DefaultFirebaseGatewayProvider( private val enterpriseService: EnterpriseService, ) : FirebaseGatewayProvider { override fun getFirebaseGateway(): String { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt index e5589af493..5ca15057ce 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.firebase -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.log.logger.LoggerTag -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.pushproviders.api.PusherSubscriber @@ -18,7 +18,7 @@ import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.libraries.sessionstorage.api.SessionStore import io.element.android.libraries.sessionstorage.api.toUserList import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("FirebaseNewTokenHandler", LoggerTag.PushLoggerTag) @@ -30,7 +30,8 @@ interface FirebaseNewTokenHandler { } @ContributesBinding(AppScope::class) -class DefaultFirebaseNewTokenHandler @Inject constructor( +@Inject +class DefaultFirebaseNewTokenHandler( private val pusherSubscriber: PusherSubscriber, private val sessionStore: SessionStore, private val userPushStoreFactory: UserPushStoreFactory, diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt index d142c71e6f..945ea5711d 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt @@ -8,9 +8,10 @@ package io.element.android.libraries.pushproviders.firebase import io.element.android.libraries.pushproviders.api.PushData -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class FirebasePushParser @Inject constructor() { +@Inject +class FirebasePushParser() { fun parse(message: Map): PushData? { val pushDataFirebase = PushDataFirebase( eventId = message["event_id"], diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt index a6be83e803..3980560049 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt @@ -7,9 +7,10 @@ package io.element.android.libraries.pushproviders.firebase -import com.squareup.anvil.annotations.ContributesMultibinding +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.log.logger.LoggerTag -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig @@ -17,12 +18,12 @@ import io.element.android.libraries.pushproviders.api.Distributor import io.element.android.libraries.pushproviders.api.PushProvider import io.element.android.libraries.pushproviders.api.PusherSubscriber import timber.log.Timber -import javax.inject.Inject private val loggerTag = LoggerTag("FirebasePushProvider", LoggerTag.PushLoggerTag) -@ContributesMultibinding(AppScope::class) -class FirebasePushProvider @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class FirebasePushProvider( private val firebaseStore: FirebaseStore, private val pusherSubscriber: PusherSubscriber, private val isPlayServiceAvailable: IsPlayServiceAvailable, diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseStore.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseStore.kt index 8f1c26ccb4..a1c70e2c05 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseStore.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseStore.kt @@ -9,13 +9,13 @@ package io.element.android.libraries.pushproviders.firebase import android.content.SharedPreferences import androidx.core.content.edit -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.flow.onStart -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * This class store the Firebase token in SharedPrefs. @@ -27,7 +27,8 @@ interface FirebaseStore { } @ContributesBinding(AppScope::class) -class SharedPreferencesFirebaseStore @Inject constructor( +@Inject +class SharedPreferencesFirebaseStore( private val sharedPreferences: SharedPreferences, ) : FirebaseStore { override fun getFcmToken(): String? { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenDeleter.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenDeleter.kt index c3aa66d3e4..9034686304 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenDeleter.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenDeleter.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.pushproviders.firebase import com.google.firebase.messaging.FirebaseMessaging -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlin.coroutines.suspendCoroutine @@ -24,7 +24,8 @@ interface FirebaseTokenDeleter { } @ContributesBinding(AppScope::class) -class DefaultFirebaseTokenDeleter @Inject constructor( +@Inject +class DefaultFirebaseTokenDeleter( private val isPlayServiceAvailable: IsPlayServiceAvailable, ) : FirebaseTokenDeleter { override suspend fun delete() { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenGetter.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenGetter.kt index 9e76dd9f52..216b80f6aa 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenGetter.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenGetter.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.pushproviders.firebase import com.google.firebase.messaging.FirebaseMessaging -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlin.coroutines.suspendCoroutine @@ -25,7 +25,8 @@ interface FirebaseTokenGetter { } @ContributesBinding(AppScope::class) -class DefaultFirebaseTokenGetter @Inject constructor( +@Inject +class DefaultFirebaseTokenGetter( private val isPlayServiceAvailable: IsPlayServiceAvailable, ) : FirebaseTokenGetter { override suspend fun get(): String { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenRotator.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenRotator.kt index cf6eb4b2cc..197a1b36c6 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenRotator.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenRotator.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.firebase -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface FirebaseTokenRotator { suspend fun rotate(): Result @@ -20,7 +20,8 @@ interface FirebaseTokenRotator { * This class delete the Firebase token and generate a new one. */ @ContributesBinding(AppScope::class) -class DefaultFirebaseTokenRotator @Inject constructor( +@Inject +class DefaultFirebaseTokenRotator( private val firebaseTokenDeleter: FirebaseTokenDeleter, private val firebaseTokenGetter: FirebaseTokenGetter, ) : FirebaseTokenRotator { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTroubleshooter.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTroubleshooter.kt index 8326496dd2..20ef932be5 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTroubleshooter.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTroubleshooter.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.firebase -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.runCatchingExceptions -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface FirebaseTroubleshooter { suspend fun troubleshoot(): Result @@ -20,7 +20,8 @@ interface FirebaseTroubleshooter { * This class force retrieving and storage of the Firebase token. */ @ContributesBinding(AppScope::class) -class DefaultFirebaseTroubleshooter @Inject constructor( +@Inject +class DefaultFirebaseTroubleshooter( private val newTokenHandler: FirebaseNewTokenHandler, private val firebaseTokenGetter: FirebaseTokenGetter, ) : FirebaseTroubleshooter { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt index ddaaad6bc2..9f8888b7c7 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt @@ -10,11 +10,11 @@ package io.element.android.libraries.pushproviders.firebase import android.content.Context import com.google.android.gms.common.ConnectionResult import com.google.android.gms.common.GoogleApiAvailabilityLight -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface IsPlayServiceAvailable { fun isAvailable(): Boolean @@ -27,7 +27,8 @@ fun IsPlayServiceAvailable.checkAvailableOrThrow() { } @ContributesBinding(AppScope::class) -class DefaultIsPlayServiceAvailable @Inject constructor( +@Inject +class DefaultIsPlayServiceAvailable( @ApplicationContext private val context: Context, ) : IsPlayServiceAvailable { override fun isAvailable(): Boolean { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt index 2c138c3cb6..d64be7924a 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt @@ -16,7 +16,7 @@ import io.element.android.libraries.pushproviders.api.PushHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("VectorFirebaseMessagingService", LoggerTag.PushLoggerTag) diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingServiceBindings.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingServiceBindings.kt index c679c88366..4bb493ace6 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingServiceBindings.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingServiceBindings.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.pushproviders.firebase -import com.squareup.anvil.annotations.ContributesTo -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) interface VectorFirebaseMessagingServiceBindings { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseAvailabilityTest.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseAvailabilityTest.kt index 0a5ccd82c5..f094c120a2 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseAvailabilityTest.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseAvailabilityTest.kt @@ -7,8 +7,9 @@ package io.element.android.libraries.pushproviders.firebase.troubleshoot -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushproviders.firebase.FirebaseConfig import io.element.android.libraries.pushproviders.firebase.IsPlayServiceAvailable import io.element.android.libraries.pushproviders.firebase.R @@ -19,10 +20,10 @@ import io.element.android.libraries.troubleshoot.api.test.TestFilterData import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow -import javax.inject.Inject -@ContributesMultibinding(AppScope::class) -class FirebaseAvailabilityTest @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class FirebaseAvailabilityTest( private val isPlayServiceAvailable: IsPlayServiceAvailable, private val stringProvider: StringProvider, ) : NotificationTroubleshootTest { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseTokenTest.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseTokenTest.kt index 12e1762a73..95d66a2842 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseTokenTest.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseTokenTest.kt @@ -7,8 +7,9 @@ package io.element.android.libraries.pushproviders.firebase.troubleshoot -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushproviders.firebase.FirebaseConfig import io.element.android.libraries.pushproviders.firebase.FirebaseStore import io.element.android.libraries.pushproviders.firebase.FirebaseTroubleshooter @@ -23,10 +24,10 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import javax.inject.Inject -@ContributesMultibinding(AppScope::class) -class FirebaseTokenTest @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class FirebaseTokenTest( private val firebaseStore: FirebaseStore, private val firebaseTroubleshooter: FirebaseTroubleshooter, private val stringProvider: StringProvider, diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt index af434c3020..28c791cdb8 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt @@ -7,17 +7,18 @@ package io.element.android.libraries.pushproviders.unifiedpush -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.enterprise.api.EnterpriseService -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface DefaultPushGatewayHttpUrlProvider { fun provide(): String } @ContributesBinding(AppScope::class) -class DefaultDefaultPushGatewayHttpUrlProvider @Inject constructor( +@Inject +class DefaultDefaultPushGatewayHttpUrlProvider( private val enterpriseService: EnterpriseService, ) : DefaultPushGatewayHttpUrlProvider { override fun provide(): String { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt index 4072cc387d..24587c85e6 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.pushproviders.unifiedpush -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface GuardServiceStarter { fun start() {} @@ -17,4 +17,5 @@ interface GuardServiceStarter { } @ContributesBinding(AppScope::class) -class NoopGuardServiceStarter @Inject constructor() : GuardServiceStarter +@Inject +class NoopGuardServiceStarter() : GuardServiceStarter diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt index 862212c333..272b111ff5 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt @@ -8,16 +8,16 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.pushproviders.api.Distributor import io.element.android.libraries.pushproviders.unifiedpush.registration.EndpointRegistrationHandler import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.first import kotlinx.coroutines.withTimeout import org.unifiedpush.android.connector.UnifiedPush -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds interface RegisterUnifiedPushUseCase { @@ -25,7 +25,8 @@ interface RegisterUnifiedPushUseCase { } @ContributesBinding(AppScope::class) -class DefaultRegisterUnifiedPushUseCase @Inject constructor( +@Inject +class DefaultRegisterUnifiedPushUseCase( @ApplicationContext private val context: Context, private val endpointRegistrationHandler: EndpointRegistrationHandler, ) : RegisterUnifiedPushUseCase { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushApiFactory.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushApiFactory.kt index 6b2aefe6f1..2bd4d24f9d 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushApiFactory.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushApiFactory.kt @@ -7,18 +7,19 @@ package io.element.android.libraries.pushproviders.unifiedpush -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.network.RetrofitFactory import io.element.android.libraries.pushproviders.unifiedpush.network.UnifiedPushApi -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface UnifiedPushApiFactory { fun create(baseUrl: String): UnifiedPushApi } @ContributesBinding(AppScope::class) -class DefaultUnifiedPushApiFactory @Inject constructor( +@Inject +class DefaultUnifiedPushApiFactory( private val retrofitFactory: RetrofitFactory, ) : UnifiedPushApiFactory { override fun create(baseUrl: String): UnifiedPushApi { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushCurrentUserPushConfigProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushCurrentUserPushConfigProvider.kt index b48393c0eb..0aaf14bdf4 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushCurrentUserPushConfigProvider.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushCurrentUserPushConfigProvider.kt @@ -7,20 +7,21 @@ package io.element.android.libraries.pushproviders.unifiedpush -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import io.element.android.services.appnavstate.api.AppNavigationStateService import io.element.android.services.appnavstate.api.currentSessionId -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface UnifiedPushCurrentUserPushConfigProvider { suspend fun provide(): CurrentUserPushConfig? } @ContributesBinding(AppScope::class) -class DefaultUnifiedPushCurrentUserPushConfigProvider @Inject constructor( +@Inject +class DefaultUnifiedPushCurrentUserPushConfigProvider( private val pushClientSecret: PushClientSecret, private val unifiedPushStore: UnifiedPushStore, private val appNavigationStateService: AppNavigationStateService, diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushDistributorProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushDistributorProvider.kt index 92746c62c8..1c638d8967 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushDistributorProvider.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushDistributorProvider.kt @@ -8,20 +8,21 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.system.getApplicationLabel -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.pushproviders.api.Distributor import org.unifiedpush.android.connector.UnifiedPush -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface UnifiedPushDistributorProvider { fun getDistributors(): List } @ContributesBinding(AppScope::class) -class DefaultUnifiedPushDistributorProvider @Inject constructor( +@Inject +class DefaultUnifiedPushDistributorProvider( @ApplicationContext private val context: Context, ) : UnifiedPushDistributorProvider { override fun getDistributors(): List { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayResolver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayResolver.kt index 8dc54dff8c..ed6bb6d4a3 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayResolver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayResolver.kt @@ -7,17 +7,17 @@ package io.element.android.libraries.pushproviders.unifiedpush -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.core.log.logger.LoggerTag -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.coroutines.withContext import retrofit2.HttpException import timber.log.Timber import java.net.HttpURLConnection import java.net.URL -import javax.inject.Inject +import dev.zacsweers.metro.Inject sealed interface UnifiedPushGatewayResolverResult { data class Success(val gateway: String) : UnifiedPushGatewayResolverResult @@ -33,7 +33,8 @@ interface UnifiedPushGatewayResolver { private val loggerTag = LoggerTag("DefaultUnifiedPushGatewayResolver") @ContributesBinding(AppScope::class) -class DefaultUnifiedPushGatewayResolver @Inject constructor( +@Inject +class DefaultUnifiedPushGatewayResolver( private val unifiedPushApiFactory: UnifiedPushApiFactory, private val coroutineDispatchers: CoroutineDispatchers, ) : UnifiedPushGatewayResolver { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt index e7e31cfd67..1d757c643e 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.pushproviders.unifiedpush -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject interface UnifiedPushGatewayUrlResolver { fun resolve( @@ -19,7 +19,8 @@ interface UnifiedPushGatewayUrlResolver { } @ContributesBinding(AppScope::class) -class DefaultUnifiedPushGatewayUrlResolver @Inject constructor( +@Inject +class DefaultUnifiedPushGatewayUrlResolver( private val unifiedPushStore: UnifiedPushStore, private val defaultPushGatewayHttpUrlProvider: DefaultPushGatewayHttpUrlProvider, ) : UnifiedPushGatewayUrlResolver { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushNewGatewayHandler.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushNewGatewayHandler.kt index 3436a028c2..2a65e157b3 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushNewGatewayHandler.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushNewGatewayHandler.kt @@ -7,16 +7,16 @@ package io.element.android.libraries.pushproviders.unifiedpush -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.log.logger.LoggerTag -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.pushproviders.api.PusherSubscriber import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("DefaultUnifiedPushNewGatewayHandler", LoggerTag.PushLoggerTag) @@ -28,7 +28,8 @@ interface UnifiedPushNewGatewayHandler { } @ContributesBinding(AppScope::class) -class DefaultUnifiedPushNewGatewayHandler @Inject constructor( +@Inject +class DefaultUnifiedPushNewGatewayHandler( private val pusherSubscriber: PusherSubscriber, private val userPushStoreFactory: UserPushStoreFactory, private val pushClientSecret: PushClientSecret, diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt index 16b1d72d5a..70e16f29d4 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt @@ -10,9 +10,10 @@ package io.element.android.libraries.pushproviders.unifiedpush import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.pushproviders.api.PushData import kotlinx.serialization.json.Json -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class UnifiedPushParser @Inject constructor() { +@Inject +class UnifiedPushParser() { private val json by lazy { Json { ignoreUnknownKeys = true } } fun parse(message: ByteArray, clientSecret: String): PushData? { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt index 4eabf8f29f..6f2822c533 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt @@ -7,18 +7,19 @@ package io.element.android.libraries.pushproviders.unifiedpush -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig import io.element.android.libraries.pushproviders.api.Distributor import io.element.android.libraries.pushproviders.api.PushProvider import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret -import javax.inject.Inject +import dev.zacsweers.metro.Inject -@ContributesMultibinding(AppScope::class) -class UnifiedPushProvider @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class UnifiedPushProvider( private val unifiedPushDistributorProvider: UnifiedPushDistributorProvider, private val registerUnifiedPushUseCase: RegisterUnifiedPushUseCase, private val unRegisterUnifiedPushUseCase: UnregisterUnifiedPushUseCase, diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushStore.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushStore.kt index fac161814c..89d8efff85 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushStore.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushStore.kt @@ -10,11 +10,11 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context import android.content.SharedPreferences import androidx.core.content.edit -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.UserId -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface UnifiedPushStore { fun getEndpoint(clientSecret: String): String? @@ -26,7 +26,8 @@ interface UnifiedPushStore { } @ContributesBinding(AppScope::class) -class SharedPreferencesUnifiedPushStore @Inject constructor( +@Inject +class SharedPreferencesUnifiedPushStore( @ApplicationContext val context: Context, private val sharedPreferences: SharedPreferences, ) : UnifiedPushStore { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt index 24b9676c11..a0c7846895 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt @@ -8,14 +8,14 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.pushproviders.api.PusherSubscriber import org.unifiedpush.android.connector.UnifiedPush import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface UnregisterUnifiedPushUseCase { /** @@ -30,7 +30,8 @@ interface UnregisterUnifiedPushUseCase { } @ContributesBinding(AppScope::class) -class DefaultUnregisterUnifiedPushUseCase @Inject constructor( +@Inject +class DefaultUnregisterUnifiedPushUseCase( @ApplicationContext private val context: Context, private val unifiedPushStore: UnifiedPushStore, private val pusherSubscriber: PusherSubscriber, diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt index b19aa985fe..0a89ef0b33 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt @@ -22,7 +22,8 @@ import org.unifiedpush.android.connector.MessagingReceiver import org.unifiedpush.android.connector.data.PushEndpoint import org.unifiedpush.android.connector.data.PushMessage import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject +import io.element.android.libraries.di.DaggerComponentOwner private val loggerTag = LoggerTag("VectorUnifiedPushMessagingReceiver", LoggerTag.PushLoggerTag) @@ -39,7 +40,7 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() { @Inject lateinit var coroutineScope: CoroutineScope override fun onReceive(context: Context, intent: Intent) { - context.applicationContext.bindings().inject(this) + ((context.applicationContext as DaggerComponentOwner).daggerComponent as VectorUnifiedPushMessagingReceiverBindings).inject(this) super.onReceive(context, intent) } diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt index f686419778..610ca861a5 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.unifiedpush -import com.squareup.anvil.annotations.ContributesTo -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.GraphExtension +import dev.zacsweers.metro.AppScope -@ContributesTo(AppScope::class) +@GraphExtension(AppScope::class) interface VectorUnifiedPushMessagingReceiverBindings { fun inject(receiver: VectorUnifiedPushMessagingReceiver) } diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt index a3ec295155..d0df3fbcb9 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.pushproviders.unifiedpush.registration -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject data class RegistrationResult( val clientSecret: String, @@ -19,7 +19,8 @@ data class RegistrationResult( ) @SingleIn(AppScope::class) -class EndpointRegistrationHandler @Inject constructor() { +@Inject +class EndpointRegistrationHandler() { private val _state = MutableSharedFlow() val state: SharedFlow = _state diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/OpenDistributorWebPageAction.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/OpenDistributorWebPageAction.kt index 3e1afb86e3..e7011f6c8d 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/OpenDistributorWebPageAction.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/OpenDistributorWebPageAction.kt @@ -8,19 +8,20 @@ package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.androidutils.system.openUrlInExternalApp -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface OpenDistributorWebPageAction { fun execute() } @ContributesBinding(AppScope::class) -class DefaultOpenDistributorWebPageAction @Inject constructor( +@Inject +class DefaultOpenDistributorWebPageAction( @ApplicationContext private val context: Context, ) : OpenDistributorWebPageAction { override fun execute() { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushMatrixGatewayTest.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushMatrixGatewayTest.kt index 8290452177..534d8fc83d 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushMatrixGatewayTest.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushMatrixGatewayTest.kt @@ -7,9 +7,10 @@ package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot -import com.squareup.anvil.annotations.ContributesMultibinding +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushApiFactory import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushCurrentUserPushConfigProvider @@ -20,10 +21,10 @@ import io.element.android.libraries.troubleshoot.api.test.TestFilterData import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch -import javax.inject.Inject -@ContributesMultibinding(AppScope::class) -class UnifiedPushMatrixGatewayTest @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class UnifiedPushMatrixGatewayTest( private val unifiedPushApiFactory: UnifiedPushApiFactory, private val coroutineDispatchers: CoroutineDispatchers, private val unifiedPushCurrentUserPushConfigProvider: UnifiedPushCurrentUserPushConfigProvider, diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushTest.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushTest.kt index d2718ee9a5..acb8e8aa98 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushTest.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushTest.kt @@ -7,8 +7,9 @@ package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot -import com.squareup.anvil.annotations.ContributesMultibinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushproviders.unifiedpush.R import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushDistributorProvider @@ -19,10 +20,10 @@ import io.element.android.libraries.troubleshoot.api.test.TestFilterData import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow -import javax.inject.Inject -@ContributesMultibinding(AppScope::class) -class UnifiedPushTest @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class UnifiedPushTest( private val unifiedPushDistributorProvider: UnifiedPushDistributorProvider, private val openDistributorWebPageAction: OpenDistributorWebPageAction, private val stringProvider: StringProvider, diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt index aef5c94da2..458b494c60 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt @@ -8,20 +8,21 @@ package io.element.android.libraries.pushstore.impl import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import io.element.android.libraries.pushstore.api.UserPushStore import io.element.android.libraries.pushstore.api.UserPushStoreFactory import java.util.concurrent.ConcurrentHashMap -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultUserPushStoreFactory @Inject constructor( +@Inject +class DefaultUserPushStoreFactory( @ApplicationContext private val context: Context, private val preferenceDataStoreFactory: PreferenceDataStoreFactory, ) : UserPushStoreFactory { diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DataStorePushClientSecretStore.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DataStorePushClientSecretStore.kt index 7728b0847a..98ab23c9ea 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DataStorePushClientSecretStore.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DataStorePushClientSecretStore.kt @@ -9,16 +9,17 @@ package io.element.android.libraries.pushstore.impl.clientsecret import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.stringPreferencesKey -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretStore import kotlinx.coroutines.flow.first -import javax.inject.Inject @ContributesBinding(AppScope::class) -class DataStorePushClientSecretStore @Inject constructor( +@Inject +class DataStorePushClientSecretStore( preferenceDataStoreFactory: PreferenceDataStoreFactory, ) : PushClientSecretStore { private val dataStore = preferenceDataStoreFactory.create("push_client_secret_store") diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt index 84ae182161..8d426b9ba0 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt @@ -7,16 +7,17 @@ package io.element.android.libraries.pushstore.impl.clientsecret -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretFactory import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretStore -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultPushClientSecret @Inject constructor( +@Inject +class DefaultPushClientSecret( private val pushClientSecretFactory: PushClientSecretFactory, private val pushClientSecretStore: PushClientSecretStore, ) : PushClientSecret { diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt index 21d6f048f6..d912b1c567 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt @@ -7,14 +7,15 @@ package io.element.android.libraries.pushstore.impl.clientsecret -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretFactory import java.util.UUID -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultPushClientSecretFactory @Inject constructor() : PushClientSecretFactory { +@Inject +class DefaultPushClientSecretFactory() : PushClientSecretFactory { override fun create(): String { return UUID.randomUUID().toString() } diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt index 613e59848a..1e7d44477e 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.libraries.roomselect.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.SessionScope import io.element.android.libraries.roomselect.api.RoomSelectEntryPoint -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultRoomSelectEntryPoint @Inject constructor() : RoomSelectEntryPoint { +@Inject +class DefaultRoomSelectEntryPoint() : RoomSelectEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): RoomSelectEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectNode.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectNode.kt index 746501490f..7237f739a3 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectNode.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectNode.kt @@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs @@ -23,7 +23,8 @@ import io.element.android.libraries.roomselect.api.RoomSelectEntryPoint import io.element.android.libraries.roomselect.api.RoomSelectMode @ContributesNode(SessionScope::class) -class RoomSelectNode @AssistedInject constructor( +@Inject +class RoomSelectNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, presenterFactory: RoomSelectPresenter.Factory, diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt index a6bfb6d06b..83c13bf775 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectPresenter.kt @@ -16,9 +16,9 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.designsystem.theme.components.SearchBarResultState import io.element.android.libraries.matrix.ui.model.SelectRoomInfo @@ -27,7 +27,8 @@ import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList -class RoomSelectPresenter @AssistedInject constructor( +@Inject +class RoomSelectPresenter( @Assisted private val mode: RoomSelectMode, private val dataSource: RoomSelectSearchDataSource, ) : Presenter { diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt index 88a3201b62..b4a38cfe6d 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt @@ -21,7 +21,7 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val PAGE_SIZE = 30 @@ -29,7 +29,8 @@ private const val PAGE_SIZE = 30 * DataSource for RoomSummaryDetails that can be filtered by a search query, * and which only includes rooms the user has joined. */ -class RoomSelectSearchDataSource @Inject constructor( +@Inject +class RoomSelectSearchDataSource( roomListService: RoomListService, coroutineDispatchers: CoroutineDispatchers, ) { diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt index d65fa5da90..c3f12c304f 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt @@ -10,10 +10,10 @@ package io.element.android.libraries.sessionstorage.impl import app.cash.sqldelight.coroutines.asFlow import app.cash.sqldelight.coroutines.mapToList import app.cash.sqldelight.coroutines.mapToOneOrNull -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.sessionstorage.api.LoggedInState import io.element.android.libraries.sessionstorage.api.SessionData import io.element.android.libraries.sessionstorage.api.SessionStore @@ -22,11 +22,12 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DatabaseSessionStore @Inject constructor( +@Inject +class DatabaseSessionStore( private val database: SessionDatabase, private val dispatchers: CoroutineDispatchers, ) : SessionStore { 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/SessionStorageModule.kt index f9730f8095..b11297396e 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/SessionStorageModule.kt @@ -8,17 +8,17 @@ package io.element.android.libraries.sessionstorage.impl.di import android.content.Context -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.sessionstorage.impl.SessionDatabase import io.element.encrypteddb.SqlCipherDriverFactory import io.element.encrypteddb.passphrase.RandomSecretPassphraseProvider -@Module +@BindingContainer @ContributesTo(AppScope::class) object SessionStorageModule { @Provides diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/observer/DefaultSessionObserver.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/observer/DefaultSessionObserver.kt index 71fc9b6a98..600a659cac 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/observer/DefaultSessionObserver.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/observer/DefaultSessionObserver.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.sessionstorage.impl.observer -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.sessionstorage.api.SessionStore import io.element.android.libraries.sessionstorage.api.observer.SessionListener @@ -23,11 +23,12 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.util.concurrent.CopyOnWriteArraySet -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class DefaultSessionObserver @Inject constructor( +@Inject +class DefaultSessionObserver( private val sessionStore: SessionStore, @AppCoroutineScope private val coroutineScope: CoroutineScope, diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanFormatter.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanFormatter.kt index f4b5f96bf4..54f6d61653 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanFormatter.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanFormatter.kt @@ -7,13 +7,13 @@ package io.element.android.libraries.textcomposer.mentions -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.ui.messages.RoomMemberProfilesCache import io.element.android.libraries.matrix.ui.messages.RoomNamesCache -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val EVERYONE_DISPLAY_TEXT = "@room" private const val BUBBLE_ICON = "\uD83D\uDCAC" // 💬 @@ -28,7 +28,8 @@ interface MentionSpanFormatter { * based on its MentionType and context. */ @ContributesBinding(RoomScope::class) -class DefaultMentionSpanFormatter @Inject constructor( +@Inject +class DefaultMentionSpanFormatter( private val roomMemberProfilesCache: RoomMemberProfilesCache, private val roomNamesCache: RoomNamesCache, ) : MentionSpanFormatter { diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt index a233897254..d2dc3d5c36 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt @@ -12,14 +12,15 @@ import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser -import javax.inject.Inject +import dev.zacsweers.metro.Inject private const val EVERYONE_MENTION_TEXT = "@room" /** * Provider for [MentionSpan]s. */ -open class MentionSpanProvider @Inject constructor( +open @Inject +class MentionSpanProvider( private val permalinkParser: PermalinkParser, private val mentionSpanFormatter: MentionSpanFormatter, private val mentionSpanTheme: MentionSpanTheme, diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt index 4edbb8bf38..2276b67e08 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt @@ -38,7 +38,7 @@ import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.messageFromMeBackground import io.element.android.libraries.designsystem.theme.messageFromOtherBackground import io.element.android.libraries.di.SessionScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.UserId @@ -46,7 +46,7 @@ import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser import kotlinx.collections.immutable.persistentListOf -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Theme used for mention spans. diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt index 94d74a72e3..9d299420be 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt @@ -12,12 +12,12 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.staticCompositionLocalOf -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.ui.messages.RoomMemberProfilesCache import io.element.android.libraries.matrix.ui.messages.RoomNamesCache -import javax.inject.Inject +import dev.zacsweers.metro.Inject interface MentionSpanUpdater { fun updateMentionSpans(text: CharSequence): CharSequence @@ -27,7 +27,8 @@ interface MentionSpanUpdater { } @ContributesBinding(RoomScope::class) -class DefaultMentionSpanUpdater @Inject constructor( +@Inject +class DefaultMentionSpanUpdater( private val formatter: MentionSpanFormatter, private val theme: MentionSpanTheme, private val roomMemberProfilesCache: RoomMemberProfilesCache, diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt index aa7e55b07a..f9778628fe 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.libraries.troubleshoot.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.troubleshoot.api.NotificationTroubleShootEntryPoint -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultNotificationTroubleShootEntryPoint @Inject constructor() : NotificationTroubleShootEntryPoint { +@Inject +class DefaultNotificationTroubleShootEntryPoint() : NotificationTroubleShootEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NotificationTroubleShootEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsNode.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsNode.kt index 72c999835a..85cb2f1f98 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsNode.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @@ -22,7 +22,8 @@ import io.element.android.libraries.troubleshoot.api.NotificationTroubleShootEnt import io.element.android.services.analytics.api.ScreenTracker @ContributesNode(SessionScope::class) -class TroubleshootNotificationsNode @AssistedInject constructor( +@Inject +class TroubleshootNotificationsNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: TroubleshootNotificationsPresenter, diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsPresenter.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsPresenter.kt index 9b6a2ce5fc..ad38ca6adf 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsPresenter.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsPresenter.kt @@ -14,9 +14,10 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope import io.element.android.libraries.architecture.Presenter import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TroubleshootNotificationsPresenter @Inject constructor( +@Inject +class TroubleshootNotificationsPresenter( private val troubleshootTestSuite: TroubleshootTestSuite, ) : Presenter { @Composable diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootTestSuite.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootTestSuite.kt index bd4e899217..31edcbcf54 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootTestSuite.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootTestSuite.kt @@ -20,9 +20,10 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class TroubleshootTestSuite @Inject constructor( +@Inject +class TroubleshootTestSuite( private val notificationTroubleshootTests: Set<@JvmSuppressWildcards NotificationTroubleshootTest>, private val getCurrentPushProvider: GetCurrentPushProvider, private val analyticsService: AnalyticsService, diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt index dd8f663414..75651cc5a1 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt @@ -10,14 +10,15 @@ package io.element.android.libraries.troubleshoot.impl.history import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.troubleshoot.api.PushHistoryEntryPoint -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultPushHistoryEntryPoint @Inject constructor() : PushHistoryEntryPoint { +@Inject +class DefaultPushHistoryEntryPoint() : PushHistoryEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): PushHistoryEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryNode.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryNode.kt index 347a1c2700..d7d8713b7a 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryNode.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryNode.kt @@ -13,8 +13,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.di.SessionScope @@ -25,7 +25,8 @@ import io.element.android.libraries.troubleshoot.api.PushHistoryEntryPoint import io.element.android.services.analytics.api.ScreenTracker @ContributesNode(SessionScope::class) -class PushHistoryNode @AssistedInject constructor( +@Inject +class PushHistoryNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: PushHistoryPresenter, diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenter.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenter.kt index ec6f2f0abb..f7d7d78110 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenter.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenter.kt @@ -20,9 +20,10 @@ import io.element.android.libraries.push.api.PushService import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PushHistoryPresenter @Inject constructor( +@Inject +class PushHistoryPresenter( private val pushService: PushService, ) : Presenter { @Composable diff --git a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt index 9f3b38254a..eae739e87f 100644 --- a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt +++ b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt @@ -7,16 +7,17 @@ package io.element.android.libraries.usersearch.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.usersearch.api.UserListDataSource -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class MatrixUserListDataSource @Inject constructor( +@Inject +class MatrixUserListDataSource( private val client: MatrixClient ) : UserListDataSource { override suspend fun search(query: String, count: Long): List { diff --git a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt index 51182af23b..daef3bfdc6 100644 --- a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt +++ b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.usersearch.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.MatrixPatterns @@ -20,10 +20,11 @@ import io.element.android.libraries.usersearch.api.UserSearchResultState import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class MatrixUserRepository @Inject constructor( +@Inject +class MatrixUserRepository( private val client: MatrixClient, private val dataSource: UserListDataSource ) : UserRepository { diff --git a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePresenterFactory.kt b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePresenterFactory.kt index e6d596e90a..eb2b74bbbb 100644 --- a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePresenterFactory.kt +++ b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePresenterFactory.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.voiceplayer.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.annotations.SessionCoroutineScope @@ -17,11 +17,12 @@ import io.element.android.libraries.voiceplayer.api.VoiceMessagePresenterFactory import io.element.android.libraries.voiceplayer.api.VoiceMessageState import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration @ContributesBinding(RoomScope::class) -class DefaultVoiceMessagePresenterFactory @Inject constructor( +@Inject +class DefaultVoiceMessagePresenterFactory( private val analyticsService: AnalyticsService, @SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope, diff --git a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessageMediaRepo.kt b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessageMediaRepo.kt index 9f000b8c32..c8987e2576 100644 --- a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessageMediaRepo.kt +++ b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessageMediaRepo.kt @@ -7,10 +7,11 @@ package io.element.android.libraries.voiceplayer.impl -import com.squareup.anvil.annotations.ContributesBinding -import dagger.assisted.Assisted -import dagger.assisted.AssistedFactory -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Named import io.element.android.libraries.core.extensions.mapCatchingExceptions import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.di.RoomScope @@ -56,8 +57,9 @@ interface VoiceMessageMediaRepo { suspend fun getMediaFile(): Result } -class DefaultVoiceMessageMediaRepo @AssistedInject constructor( - @CacheDirectory private val cacheDir: File, +@Inject +class DefaultVoiceMessageMediaRepo( + @Named("cacheDirectory") private val cacheDir: File, mxcTools: MxcTools, private val matrixMediaLoader: MatrixMediaLoader, @Assisted private val mediaSource: MediaSource, diff --git a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessagePlayer.kt b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessagePlayer.kt index e57f065f06..8a1cf2c46d 100644 --- a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessagePlayer.kt +++ b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessagePlayer.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.voiceplayer.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.mapCatchingExceptions import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.di.RoomScope @@ -20,7 +20,7 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.update import java.io.File -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * A media player specialized in playing a single voice message. @@ -116,8 +116,9 @@ class DefaultVoiceMessagePlayer( mimeType: String?, filename: String?, ) : VoiceMessagePlayer { - @ContributesBinding(RoomScope::class) // Scoped types can't use @AssistedInject. - class Factory @Inject constructor( + @ContributesBinding(RoomScope::class) // Scoped types can't use @Inject. + @Inject +class Factory( private val mediaPlayer: MediaPlayer, private val voiceMessageMediaRepoFactory: VoiceMessageMediaRepo.Factory, ) : VoiceMessagePlayer.Factory { diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorder.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorder.kt index 5e690ab1f7..49f81c7ac4 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorder.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorder.kt @@ -9,12 +9,12 @@ package io.element.android.libraries.voicerecorder.impl import android.Manifest import androidx.annotation.RequiresPermission -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.appconfig.VoiceMessageConfig import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.childScope import io.element.android.libraries.di.RoomScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.voicerecorder.api.VoiceRecorder import io.element.android.libraries.voicerecorder.api.VoiceRecorderState @@ -37,13 +37,14 @@ import kotlinx.coroutines.yield import timber.log.Timber import java.io.File import java.util.UUID -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.milliseconds import kotlin.time.TimeSource @SingleIn(RoomScope::class) @ContributesBinding(RoomScope::class) -class DefaultVoiceRecorder @Inject constructor( +@Inject +class DefaultVoiceRecorder( private val dispatchers: CoroutineDispatchers, private val timeSource: TimeSource, private val audioReaderFactory: AudioReader.Factory, diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/AndroidAudioReader.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/AndroidAudioReader.kt index 5c51217758..cc8a7bbe29 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/AndroidAudioReader.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/AndroidAudioReader.kt @@ -12,7 +12,7 @@ import android.media.AudioRecord import android.media.audiofx.AutomaticGainControl import android.media.audiofx.NoiseSuppressor import androidx.annotation.RequiresPermission -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.di.RoomScope diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt index 242fd84b88..744cd0959d 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.voicerecorder.impl.audio -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.RoomScope -import javax.inject.Inject +import dev.zacsweers.metro.Inject import kotlin.math.log10 import kotlin.math.sqrt @@ -20,7 +20,8 @@ import kotlin.math.sqrt * See: https://en.wikipedia.org/wiki/DBFS */ @ContributesBinding(RoomScope::class) -class DBovAudioLevelCalculator @Inject constructor() : AudioLevelCalculator { +@Inject +class DBovAudioLevelCalculator() : AudioLevelCalculator { override fun calculateAudioLevel(buffer: ShortArray): Float { return buffer.rms().dBov().normalize().coerceIn(0f, 1f) } diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DefaultEncoder.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DefaultEncoder.kt index a64d273379..3919548120 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DefaultEncoder.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DefaultEncoder.kt @@ -7,19 +7,20 @@ package io.element.android.libraries.voicerecorder.impl.audio -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.di.RoomScope import io.element.android.opusencoder.OggOpusEncoder import timber.log.Timber import java.io.File -import javax.inject.Inject -import javax.inject.Provider +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Provider /** * Safe wrapper for OggOpusEncoder. */ @ContributesBinding(RoomScope::class) -class DefaultEncoder @Inject constructor( +@Inject +class DefaultEncoder( private val encoderProvider: Provider, config: AudioConfig, ) : Encoder { @@ -31,7 +32,7 @@ class DefaultEncoder @Inject constructor( file: File, ) { encoder?.release() - encoder = encoderProvider.get().apply { + encoder = encoderProvider().apply { init(file.absolutePath, sampleRate) setBitrate(bitRate) // TODO check encoder application: 2048 (voice, default is typically 2049 as audio) 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/VoiceRecorderModule.kt index 6b459111a8..d6e00eee7b 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/VoiceRecorderModule.kt @@ -9,9 +9,9 @@ package io.element.android.libraries.voicerecorder.impl.di import android.media.AudioFormat import android.media.MediaRecorder -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.di.RoomScope import io.element.android.libraries.voicerecorder.impl.audio.AudioConfig @@ -19,7 +19,7 @@ import io.element.android.libraries.voicerecorder.impl.audio.SampleRate import io.element.android.libraries.voicerecorder.impl.file.VoiceFileConfig import io.element.android.opusencoder.OggOpusEncoder -@Module +@BindingContainer @ContributesTo(RoomScope::class) object VoiceRecorderModule { @Provides diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/file/DefaultVoiceFileManager.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/file/DefaultVoiceFileManager.kt index 8dc6bf2dbe..ebde7185d4 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/file/DefaultVoiceFileManager.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/file/DefaultVoiceFileManager.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.voicerecorder.impl.file -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.hash.md5 import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.di.RoomScope @@ -15,11 +15,13 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.BaseRoom import java.io.File import java.util.UUID -import javax.inject.Inject +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Named @ContributesBinding(RoomScope::class) -class DefaultVoiceFileManager @Inject constructor( - @CacheDirectory private val cacheDir: File, +@Inject +class DefaultVoiceFileManager( + @Named("cacheDirectory") private val cacheDir: File, private val config: VoiceFileConfig, room: BaseRoom, ) : VoiceFileManager { diff --git a/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultSessionWellknownRetriever.kt b/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultSessionWellknownRetriever.kt index 0c948af1d9..b03a44f98c 100644 --- a/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultSessionWellknownRetriever.kt +++ b/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultSessionWellknownRetriever.kt @@ -7,7 +7,7 @@ package io.element.android.libraries.wellknown.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.extensions.mapCatchingExceptions import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient @@ -16,10 +16,11 @@ import io.element.android.libraries.wellknown.api.SessionWellknownRetriever import io.element.android.libraries.wellknown.api.WellKnown import kotlinx.serialization.json.Json import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) -class DefaultSessionWellknownRetriever @Inject constructor( +@Inject +class DefaultSessionWellknownRetriever( private val matrixClient: MatrixClient, private val parser: Json, ) : SessionWellknownRetriever { diff --git a/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultWellknownRetriever.kt b/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultWellknownRetriever.kt index 5d67cd32f0..d84092fa6a 100644 --- a/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultWellknownRetriever.kt +++ b/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultWellknownRetriever.kt @@ -7,18 +7,19 @@ package io.element.android.libraries.wellknown.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.uri.ensureProtocol -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.libraries.network.RetrofitFactory import io.element.android.libraries.wellknown.api.ElementWellKnown import io.element.android.libraries.wellknown.api.WellKnown import io.element.android.libraries.wellknown.api.WellknownRetriever import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultWellknownRetriever @Inject constructor( +@Inject +class DefaultWellknownRetriever( private val retrofitFactory: RetrofitFactory, ) : WellknownRetriever { override suspend fun getWellKnown(baseUrl: String): WellKnown? { diff --git a/plugins/build.gradle.kts b/plugins/build.gradle.kts index f37ef54e44..61be1adc3a 100644 --- a/plugins/build.gradle.kts +++ b/plugins/build.gradle.kts @@ -10,6 +10,7 @@ plugins { } repositories { + mavenLocal() mavenCentral() google() } @@ -23,6 +24,7 @@ dependencies { implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) implementation(libs.autonomousapps.dependencyanalysis.plugin) implementation(libs.anvil.gradle.plugin) + implementation(libs.metro.gradle.plugin) implementation(libs.ksp.gradle.plugin) implementation(libs.compose.compiler.plugin) } diff --git a/plugins/settings.gradle.kts b/plugins/settings.gradle.kts index 40327da593..155b7908fb 100644 --- a/plugins/settings.gradle.kts +++ b/plugins/settings.gradle.kts @@ -9,6 +9,7 @@ rootProject.name = "ElementX_plugins" dependencyResolutionManagement { repositories { + mavenLocal() mavenCentral() } versionCatalogs { diff --git a/plugins/src/main/kotlin/extension/AnvilExtensions.kt b/plugins/src/main/kotlin/extension/AnvilExtensions.kt index 38dc89a4c2..2ebd991b57 100644 --- a/plugins/src/main/kotlin/extension/AnvilExtensions.kt +++ b/plugins/src/main/kotlin/extension/AnvilExtensions.kt @@ -7,7 +7,7 @@ package extension -import com.squareup.anvil.plugin.AnvilExtension +import dev.zacsweers.metro.gradle.MetroPluginExtension import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.api.Project import org.gradle.api.provider.Provider @@ -28,30 +28,40 @@ fun Project.setupAnvil( ) { val libs = the() - // Add dagger dependency, needed for generated code - dependencies.implementation(libs.dagger) +// // Add dagger dependency, needed for generated code +// dependencies.implementation(libs.dagger) // Apply Anvil plugin and configure it - applyPluginIfNeeded(libs.plugins.anvil) + applyPluginIfNeeded(libs.plugins.metro) + applyPluginIfNeeded(libs.plugins.ksp) - project.pluginManager.withPlugin(libs.plugins.anvil.get().pluginId) { +// project.pluginManager.withPlugin(libs.plugins.anvil.get().pluginId) { +// // Setup extension +// extensions.configure(AnvilExtension::class.java) { +// this.generateDaggerFactories.set(generateDaggerFactoriesUsingAnvil) +// this.disableComponentMerging.set(componentMergingStrategy == ComponentMergingStrategy.NONE) +// +// useKsp( +// contributesAndFactoryGeneration = true, +// componentMerging = componentMergingStrategy == ComponentMergingStrategy.KSP, +// ) +// } +// } + +// if (generateDaggerCode) { +// // Needed at the top level since dagger code should be generated at a single point for performance reasons +// dependencies.add("ksp", libs.dagger.compiler) +// } + + project.pluginManager.withPlugin(libs.plugins.metro.get().pluginId) { // Setup extension - extensions.configure(AnvilExtension::class.java) { - this.generateDaggerFactories.set(generateDaggerFactoriesUsingAnvil) - this.disableComponentMerging.set(componentMergingStrategy == ComponentMergingStrategy.NONE) - - useKsp( - contributesAndFactoryGeneration = true, - componentMerging = componentMergingStrategy == ComponentMergingStrategy.KSP, - ) + extensions.configure(MetroPluginExtension::class.java) { +// debug.set(true) +// generateAssistedFactories.set(true) +// this.generateAssistedFactories.set(generateDaggerFactoriesUsingAnvil) } } - if (generateDaggerCode) { - // Needed at the top level since dagger code should be generated at a single point for performance reasons - dependencies.add("ksp", libs.dagger.compiler) - } - // These dependencies are only needed for compose library or application modules if (project.pluginManager.hasPlugin("io.element.android-compose-library") || project.pluginManager.hasPlugin("io.element.android-compose-application")) { diff --git a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt index 31d52d2249..36b59b7025 100644 --- a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt +++ b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt @@ -7,13 +7,13 @@ package io.element.android.services.analytics.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import im.vector.app.features.analytics.itf.VectorAnalyticsEvent import im.vector.app.features.analytics.itf.VectorAnalyticsScreen import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver @@ -27,11 +27,13 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import timber.log.Timber import java.util.concurrent.atomic.AtomicBoolean -import javax.inject.Inject +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.binding @SingleIn(AppScope::class) -@ContributesBinding(AppScope::class, boundType = AnalyticsService::class, rank = ContributesBinding.RANK_HIGHEST) -class DefaultAnalyticsService @Inject constructor( +@ContributesBinding(AppScope::class, binding = binding()) +@Inject +class DefaultAnalyticsService( private val analyticsProviders: Set<@JvmSuppressWildcards AnalyticsProvider>, private val analyticsStore: AnalyticsStore, // private val lateInitUserPropertiesFactory: LateInitUserPropertiesFactory, diff --git a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultScreenTracker.kt b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultScreenTracker.kt index ad80decdbe..961ecfd842 100644 --- a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultScreenTracker.kt +++ b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultScreenTracker.kt @@ -13,17 +13,18 @@ import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.lifecycle.Lifecycle -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.libraries.designsystem.utils.OnLifecycleEvent -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analytics.api.ScreenTracker import io.element.android.services.toolbox.api.systemclock.SystemClock -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultScreenTracker @Inject constructor( +@Inject +class DefaultScreenTracker( private val analyticsService: AnalyticsService, private val systemClock: SystemClock ) : ScreenTracker { diff --git a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/store/AnalyticsStore.kt b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/store/AnalyticsStore.kt index 446d3fdaaa..b6e1773be6 100644 --- a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/store/AnalyticsStore.kt +++ b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/store/AnalyticsStore.kt @@ -10,14 +10,14 @@ package io.element.android.services.analytics.impl.store import androidx.datastore.preferences.core.booleanPreferencesKey import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.stringPreferencesKey -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.bool.orFalse -import io.element.android.libraries.di.AppScope import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map -import javax.inject.Inject /** * Local storage for: @@ -36,7 +36,8 @@ interface AnalyticsStore { } @ContributesBinding(AppScope::class) -class DefaultAnalyticsStore @Inject constructor( +@Inject +class DefaultAnalyticsStore( preferenceDataStoreFactory: PreferenceDataStoreFactory, ) : AnalyticsStore { private val userConsent = booleanPreferencesKey("user_consent") diff --git a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt index 9af15543f0..a8215caabd 100644 --- a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt +++ b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt @@ -7,22 +7,23 @@ package io.element.android.services.analytics.noop -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import im.vector.app.features.analytics.itf.VectorAnalyticsEvent import im.vector.app.features.analytics.itf.VectorAnalyticsScreen import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analyticsproviders.api.AnalyticsProvider import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -import javax.inject.Inject +import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) -class NoopAnalyticsService @Inject constructor() : AnalyticsService { +@Inject +class NoopAnalyticsService() : AnalyticsService { override fun getAvailableAnalyticsProviders(): Set = emptySet() override val userConsentFlow: Flow = flowOf(false) override suspend fun setUserConsent(userConsent: Boolean) = Unit diff --git a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt index 6ddb8676a2..581c93b0c2 100644 --- a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt +++ b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt @@ -8,14 +8,15 @@ package io.element.android.services.analytics.noop import androidx.compose.runtime.Composable -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import im.vector.app.features.analytics.plan.MobileScreen -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.services.analytics.api.ScreenTracker -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class NoopScreenTracker @Inject constructor() : ScreenTracker { +@Inject +class NoopScreenTracker() : ScreenTracker { @Composable override fun TrackScreen(screen: MobileScreen.ScreenName) = Unit } diff --git a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PostHogFactory.kt b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PostHogFactory.kt index af450cfc84..200b85f0f5 100644 --- a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PostHogFactory.kt +++ b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PostHogFactory.kt @@ -12,10 +12,11 @@ import com.posthog.PostHogInterface import com.posthog.android.PostHogAndroid import com.posthog.android.PostHogAndroidConfig import io.element.android.libraries.core.meta.BuildMeta -import io.element.android.libraries.di.ApplicationContext -import javax.inject.Inject +import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.Inject -class PostHogFactory @Inject constructor( +@Inject +class PostHogFactory( @ApplicationContext private val context: Context, private val buildMeta: BuildMeta, private val posthogEndpointConfigProvider: PosthogEndpointConfigProvider, diff --git a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt index 8d2b61d62c..bde1c99070 100644 --- a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt +++ b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt @@ -8,22 +8,23 @@ package io.element.android.services.analyticsproviders.posthog import com.posthog.PostHogInterface -import com.squareup.anvil.annotations.ContributesMultibinding +import dev.zacsweers.metro.ContributesIntoSet import im.vector.app.features.analytics.itf.VectorAnalyticsEvent import im.vector.app.features.analytics.itf.VectorAnalyticsScreen import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import io.element.android.services.analyticsproviders.api.AnalyticsProvider import io.element.android.services.analyticsproviders.posthog.log.analyticsTag import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject // private val REUSE_EXISTING_ID: String? = null // private val IGNORED_OPTIONS: Options? = null -@ContributesMultibinding(AppScope::class) -class PosthogAnalyticsProvider @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class PosthogAnalyticsProvider( private val postHogFactory: PostHogFactory, ) : AnalyticsProvider { override val name = "Posthog" diff --git a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogEndpointConfigProvider.kt b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogEndpointConfigProvider.kt index da35d661e5..ef9fc8935a 100644 --- a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogEndpointConfigProvider.kt +++ b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogEndpointConfigProvider.kt @@ -11,9 +11,10 @@ import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.libraries.core.extensions.isElement import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class PosthogEndpointConfigProvider @Inject constructor( +@Inject +class PosthogEndpointConfigProvider( private val buildMeta: BuildMeta, private val enterpriseService: EnterpriseService, ) { diff --git a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt index 0effa8dc41..5e0b8a364f 100644 --- a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt +++ b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt @@ -8,15 +8,16 @@ package io.element.android.services.analyticsproviders.sentry import android.content.Context -import com.squareup.anvil.annotations.ContributesMultibinding +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.itf.VectorAnalyticsEvent import im.vector.app.features.analytics.itf.VectorAnalyticsScreen import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.analyticsproviders.api.AnalyticsProvider import io.element.android.services.analyticsproviders.sentry.log.analyticsTag import io.sentry.Breadcrumb @@ -24,12 +25,10 @@ import io.sentry.Sentry import io.sentry.SentryOptions import io.sentry.android.core.SentryAndroid import timber.log.Timber -import javax.inject.Inject -import kotlin.collections.component1 -import kotlin.collections.component2 -@ContributesMultibinding(AppScope::class) -class SentryAnalyticsProvider @Inject constructor( +@ContributesIntoSet(AppScope::class) +@Inject +class SentryAnalyticsProvider( @ApplicationContext private val context: Context, private val buildMeta: BuildMeta, ) : AnalyticsProvider { diff --git a/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/DefaultAppErrorStateService.kt b/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/DefaultAppErrorStateService.kt index 9f9ede50ee..a548a70ffe 100644 --- a/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/DefaultAppErrorStateService.kt +++ b/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/DefaultAppErrorStateService.kt @@ -7,19 +7,20 @@ package io.element.android.services.apperror.impl -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.services.apperror.api.AppErrorState import io.element.android.services.apperror.api.AppErrorStateService import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class DefaultAppErrorStateService @Inject constructor( +@Inject +class DefaultAppErrorStateService( private val stringProvider: StringProvider, ) : AppErrorStateService { private val currentAppErrorState = MutableStateFlow(AppErrorState.NoError) diff --git a/services/appnavstate/api/build.gradle.kts b/services/appnavstate/api/build.gradle.kts index cba388bfbd..bf3f26ae68 100644 --- a/services/appnavstate/api/build.gradle.kts +++ b/services/appnavstate/api/build.gradle.kts @@ -1,3 +1,5 @@ +import extension.setupAnvil + /* * Copyright 2022-2024 New Vector Ltd. * @@ -13,6 +15,8 @@ android { namespace = "io.element.android.services.appnavstate.api" } +setupAnvil() + dependencies { implementation(libs.coroutines.core) implementation(libs.androidx.lifecycle.runtime) diff --git a/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/ActiveRoomsHolder.kt b/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/ActiveRoomsHolder.kt index c45fb0a280..fab97e89c6 100644 --- a/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/ActiveRoomsHolder.kt +++ b/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/ActiveRoomsHolder.kt @@ -7,19 +7,20 @@ package io.element.android.services.appnavstate.api -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.room.JoinedRoom import java.util.concurrent.ConcurrentHashMap -import javax.inject.Inject +import dev.zacsweers.metro.Inject /** * Holds the active rooms for a given session so they can be reused instead of instantiating new ones. */ @SingleIn(AppScope::class) -class ActiveRoomsHolder @Inject constructor() { +@Inject +class ActiveRoomsHolder { private val rooms = ConcurrentHashMap>() /** diff --git a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt index 204ab66495..49be1fdd30 100644 --- a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt +++ b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt @@ -7,10 +7,10 @@ package io.element.android.services.appnavstate.impl -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.libraries.core.log.logger.LoggerTag -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.SingleIn +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -26,7 +26,7 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.launch import timber.log.Timber -import javax.inject.Inject +import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("Navigation") @@ -35,7 +35,8 @@ private val loggerTag = LoggerTag("Navigation") */ @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) -class DefaultAppNavigationStateService @Inject constructor( +@Inject +class DefaultAppNavigationStateService( private val appForegroundStateService: AppForegroundStateService, @AppCoroutineScope coroutineScope: CoroutineScope, 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/AppNavStateModule.kt index 4a78f1fdcf..5f84781bed 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/AppNavStateModule.kt @@ -9,15 +9,15 @@ package io.element.android.services.appnavstate.impl.di import android.content.Context import androidx.startup.AppInitializer -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.appnavstate.api.AppForegroundStateService import io.element.android.services.appnavstate.impl.initializer.AppForegroundStateServiceInitializer -@Module +@BindingContainer @ContributesTo(AppScope::class) object AppNavStateModule { @Provides diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/intent/DefaultExternalIntentLauncher.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/intent/DefaultExternalIntentLauncher.kt index a11317cb67..8dd2924ffe 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/intent/DefaultExternalIntentLauncher.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/intent/DefaultExternalIntentLauncher.kt @@ -9,14 +9,15 @@ package io.element.android.services.toolbox.impl.intent import android.content.Context import android.content.Intent -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.toolbox.api.intent.ExternalIntentLauncher -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultExternalIntentLauncher @Inject constructor( +@Inject +class DefaultExternalIntentLauncher( @ApplicationContext private val context: Context, ) : ExternalIntentLauncher { override fun launch(intent: Intent) { diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt index ad57202d67..163f60caad 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt @@ -8,13 +8,14 @@ package io.element.android.services.toolbox.impl.sdk import android.os.Build -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultBuildVersionSdkIntProvider @Inject constructor() : +@Inject +class DefaultBuildVersionSdkIntProvider() : BuildVersionSdkIntProvider { override fun get() = Build.VERSION.SDK_INT } diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/strings/AndroidStringProvider.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/strings/AndroidStringProvider.kt index 6ca82a0acd..bd22feed54 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/strings/AndroidStringProvider.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/strings/AndroidStringProvider.kt @@ -10,13 +10,14 @@ package io.element.android.services.toolbox.impl.strings import android.content.res.Resources import androidx.annotation.PluralsRes import androidx.annotation.StringRes -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.services.toolbox.api.strings.StringProvider -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class AndroidStringProvider @Inject constructor(private val resources: Resources) : StringProvider { +@Inject +class AndroidStringProvider(private val resources: Resources) : StringProvider { override fun getString(@StringRes resId: Int): String { return resources.getString(resId) } diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt index cbf926c00a..ab4d21eacf 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt @@ -7,13 +7,14 @@ package io.element.android.services.toolbox.impl.systemclock -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import io.element.android.services.toolbox.api.systemclock.SystemClock -import javax.inject.Inject +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class DefaultSystemClock @Inject constructor() : SystemClock { +@Inject +class DefaultSystemClock() : SystemClock { /** * Provides a UTC epoch in milliseconds * 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/TimeModule.kt index 516985afb5..ba799d0eca 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/TimeModule.kt @@ -7,13 +7,13 @@ package io.element.android.services.toolbox.impl.systemclock -import com.squareup.anvil.annotations.ContributesTo -import dagger.Module -import dagger.Provides -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides +import dev.zacsweers.metro.AppScope import kotlin.time.TimeSource -@Module +@BindingContainer @ContributesTo(AppScope::class) object TimeModule { @Provides diff --git a/settings.gradle.kts b/settings.gradle.kts index dd4bdd0ad4..ac9dbed74e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -9,6 +9,7 @@ import java.net.URI pluginManagement { repositories { + mavenLocal() includeBuild("plugins") gradlePluginPortal() google() @@ -18,6 +19,7 @@ pluginManagement { dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { + mavenLocal() google() mavenCentral() maven { diff --git a/tools/templates/files/fileTemplates/Template Module Feature Entry Point Flow Impl.kt b/tools/templates/files/fileTemplates/Template Module Feature Entry Point Flow Impl.kt index adfd142ae5..e3089e8d5e 100644 --- a/tools/templates/files/fileTemplates/Template Module Feature Entry Point Flow Impl.kt +++ b/tools/templates/files/fileTemplates/Template Module Feature Entry Point Flow Impl.kt @@ -3,14 +3,15 @@ package io.element.android.features.${MODULE_NAME}.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import com.squareup.anvil.annotations.ContributesBinding +import dev.zacsweers.metro.ContributesBinding import io.element.android.features.${MODULE_NAME}.api.${FEATURE_NAME}EntryPoint import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) -class Default${FEATURE_NAME}EntryPoint @Inject constructor() : ${FEATURE_NAME}EntryPoint { +@Inject +class Default${FEATURE_NAME}EntryPoint() : ${FEATURE_NAME}EntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): ${FEATURE_NAME}EntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/tools/templates/files/fileTemplates/Template Module Feature Node Flow Impl.kt b/tools/templates/files/fileTemplates/Template Module Feature Node Flow Impl.kt index d08d67ae38..23ee8dd68b 100644 --- a/tools/templates/files/fileTemplates/Template Module Feature Node Flow Impl.kt +++ b/tools/templates/files/fileTemplates/Template Module Feature Node Flow Impl.kt @@ -9,18 +9,19 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.BackstackNode import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope import kotlinx.parcelize.Parcelize // CHANGE THE SCOPE @ContributesNode(AppScope::class) -class ${FEATURE_NAME}FlowNode @AssistedInject constructor( +@Inject +class ${FEATURE_NAME}FlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, ) : BackstackNode<${FEATURE_NAME}FlowNode.NavTarget>( diff --git a/tools/templates/files/fileTemplates/Template Presentation Classes.kt b/tools/templates/files/fileTemplates/Template Presentation Classes.kt index aa44bc4269..91ec2165f7 100644 --- a/tools/templates/files/fileTemplates/Template Presentation Classes.kt +++ b/tools/templates/files/fileTemplates/Template Presentation Classes.kt @@ -2,9 +2,10 @@ import androidx.compose.runtime.Composable import io.element.android.libraries.architecture.Presenter -import javax.inject.Inject +import dev.zacsweers.metro.Inject -class ${NAME}Presenter @Inject constructor() : Presenter<${NAME}State> { +@Inject +class ${NAME}Presenter() : Presenter<${NAME}State> { @Composable override fun present(): ${NAME}State { diff --git a/tools/templates/files/fileTemplates/Template Presentation Classes.kt.child.1.kt b/tools/templates/files/fileTemplates/Template Presentation Classes.kt.child.1.kt index 0c997351f0..34d87b0d7a 100644 --- a/tools/templates/files/fileTemplates/Template Presentation Classes.kt.child.1.kt +++ b/tools/templates/files/fileTemplates/Template Presentation Classes.kt.child.1.kt @@ -5,14 +5,15 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode -import io.element.android.libraries.di.AppScope +import dev.zacsweers.metro.AppScope // CHANGE THE SCOPE @ContributesNode(AppScope::class) -class ${NAME}Node @AssistedInject constructor( +@Inject +class ${NAME}Node( @Assisted buildContext: BuildContext, @Assisted plugins: List, private val presenter: ${NAME}Presenter, From fc3153bd26514a3af216b0d418d1082e6a6bf5d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Sat, 23 Aug 2025 15:56:34 +0200 Subject: [PATCH 02/13] Fix lint issues and restore commented out code --- .../element/android/x/ElementXApplication.kt | 1 - .../kotlin/io/element/android/x/MainNode.kt | 2 +- .../io/element/android/x/di/AppBindings.kt | 2 +- .../io/element/android/x/di/AppComponent.kt | 2 +- .../io/element/android/x/di/AppModule.kt | 12 +- .../x/di/DefaultRoomComponentFactory.kt | 2 +- .../io/element/android/x/di/RoomComponent.kt | 1 - .../x/oidc/DefaultOidcRedirectUrlProvider.kt | 4 +- .../appnav/LoggedInAppScopeFlowNode.kt | 2 +- .../android/appnav/LoggedInEventProcessor.kt | 2 +- .../android/appnav/LoggedInFlowNode.kt | 4 +- .../android/appnav/NotLoggedInFlowNode.kt | 2 +- .../io/element/android/appnav/RootFlowNode.kt | 2 +- .../android/appnav/di/MatrixSessionCache.kt | 4 +- .../android/appnav/intent/IntentResolver.kt | 2 +- .../appnav/loggedin/LoggedInPresenter.kt | 2 +- .../loggedin/MediaPreviewConfigMigration.kt | 2 +- .../android/appnav/loggedin/SendQueues.kt | 4 +- .../appnav/root/RootNavStateFlowFactory.kt | 2 +- .../android/appnav/root/RootPresenter.kt | 2 +- .../analytics/impl/AnalyticsOptInNode.kt | 2 +- .../analytics/impl/AnalyticsOptInPresenter.kt | 2 +- .../impl/DefaultAnalyticsEntryPoint.kt | 4 +- .../analytics/impl/di/AnalyticsModule.kt | 2 +- .../AnalyticsPreferencesPresenter.kt | 2 +- .../cachecleaner/api/CacheCleanerBindings.kt | 2 +- .../cachecleaner/impl/DefaultCacheCleaner.kt | 7 +- .../call/impl/DefaultElementCallEntryPoint.kt | 4 +- .../features/call/impl/di/CallBindings.kt | 2 +- .../RingingCallNotificationCreator.kt | 2 +- .../impl/pip/PictureInPicturePresenter.kt | 2 +- .../call/impl/pip/PipSupportProvider.kt | 6 +- .../receivers/DeclineCallBroadcastReceiver.kt | 2 +- .../call/impl/ui/ElementCallActivity.kt | 2 +- .../call/impl/ui/IncomingCallActivity.kt | 2 +- .../call/impl/ui/LanguageTagProvider.kt | 2 +- .../call/impl/utils/ActiveCallManager.kt | 8 +- .../DefaultCallAnalyticCredentialsProvider.kt | 6 +- .../impl/utils/DefaultCallWidgetProvider.kt | 6 +- .../impl/utils/DefaultCurrentCallService.kt | 6 +- .../DefaultChangeRoomMemberRolesEntyPoint.kt | 2 +- .../impl/RoomMemberListDataSource.kt | 2 +- .../impl/DefaultCreateRoomEntryPoint.kt | 2 +- .../configureroom/ConfigureRoomPresenter.kt | 2 +- .../configureroom/CreateRoomConfigStore.kt | 2 +- .../impl/AccountDeactivationPresenter.kt | 2 +- .../DefaultAccountDeactivationEntryPoint.kt | 4 +- .../impl/DefaultEnterpriseService.kt | 4 +- .../impl/DefaultSessionEnterpriseService.kt | 2 +- .../ftue/impl/DefaultFtueEntryPoint.kt | 4 +- .../features/ftue/impl/FtueFlowNode.kt | 3 +- .../notifications/NotificationsOptInNode.kt | 2 +- .../ChooseSelfVerificationModePresenter.kt | 2 +- .../ftue/impl/state/DefaultFtueService.kt | 4 +- .../home/impl/DefaultHomeEntryPoint.kt | 4 +- .../features/home/impl/HomePresenter.kt | 2 +- .../impl/datasource/RoomListDataSource.kt | 2 +- .../datasource/RoomListRoomSummaryFactory.kt | 2 +- .../features/home/impl/di/RoomListModule.kt | 2 +- .../impl/filters/RoomListFiltersPresenter.kt | 2 +- .../DefaultFilterSelectionStrategy.kt | 2 +- .../home/impl/roomlist/RoomListPresenter.kt | 2 +- .../impl/search/RoomListSearchDataSource.kt | 2 +- .../impl/search/RoomListSearchPresenter.kt | 2 +- .../features/invite/impl/AcceptInvite.kt | 2 +- .../features/invite/impl/DeclineInvite.kt | 2 +- .../impl/DefaultSeenInvitesStoreFactory.kt | 8 +- .../AcceptDeclineInvitePresenter.kt | 2 +- .../DefaultAcceptDeclineInviteView.kt | 2 +- .../DeclineAndBlockPresenter.kt | 126 +++++++++--------- .../DefaultDeclineAndBlockEntryPoint.kt | 4 +- .../features/invite/impl/di/InviteModule.kt | 2 +- .../impl/DefaultInvitePeoplePresenter.kt | 2 +- .../impl/DefaultInvitePeopleRenderer.kt | 2 +- .../impl/DefaultJoinRoomEntryPoint.kt | 4 +- .../joinroom/impl/di/CancelKnockRoom.kt | 2 +- .../features/joinroom/impl/di/ForgetRoom.kt | 2 +- .../features/joinroom/impl/di/KnockRoom.kt | 2 +- .../DefaultKnockRequestsBannerRenderer.kt | 2 +- .../banner/KnockRequestsBannerPresenter.kt | 2 +- .../impl/data/KnockRequestsModule.kt | 2 +- .../DefaultKnockRequestsListEntryPoint.kt | 4 +- .../impl/list/KnockRequestsListPresenter.kt | 2 +- .../impl/InternalLeaveRoomRenderer.kt | 2 +- .../leaveroom/impl/LeaveRoomPresenter.kt | 2 +- .../leaveroom/impl/di/LeaveRoomModule.kt | 2 +- .../DefaultOpenSourcesLicensesEntryPoint.kt | 4 +- .../licenses/impl/DependenciesFlowNode.kt | 2 +- .../licenses/impl/LicensesProvider.kt | 4 +- .../impl/details/DependenciesDetailsNode.kt | 2 +- .../impl/list/DependencyLicensesListNode.kt | 2 +- .../list/DependencyLicensesListPresenter.kt | 2 +- .../location/impl/DefaultLocationService.kt | 4 +- .../common/actions/AndroidLocationActions.kt | 4 +- .../DefaultPermissionsPresenter.kt | 4 +- .../send/DefaultSendLocationEntryPoint.kt | 4 +- .../show/DefaultShowLocationEntryPoint.kt | 4 +- .../impl/DefaultLockScreenEntryPoint.kt | 4 +- .../impl/DefaultLockScreenService.kt | 6 +- .../lockscreen/impl/LockScreenConfig.kt | 2 +- .../DefaultBiometricAuthenticatorManager.kt | 8 +- .../impl/pin/DefaultPinCodeManager.kt | 6 +- .../settings/LockScreenSettingsPresenter.kt | 2 +- .../biometric/SetupBiometricPresenter.kt | 2 +- .../impl/setup/pin/SetupPinPresenter.kt | 2 +- .../impl/setup/pin/validation/PinValidator.kt | 2 +- .../lockscreen/impl/unlock/PinUnlockHelper.kt | 2 +- .../impl/unlock/PinUnlockPresenter.kt | 2 +- .../impl/unlock/activity/PinUnlockActivity.kt | 2 +- .../impl/unlock/di/PinUnlockBindings.kt | 2 +- .../login/impl/DefaultLoginEntryPoint.kt | 4 +- .../login/impl/DefaultLoginIntentResolver.kt | 4 +- .../features/login/impl/LoginFlowNode.kt | 2 +- .../DefaultAccountProviderAccessControl.kt | 4 +- .../AccountProviderDataSource.kt | 6 +- .../changeserver/ChangeServerPresenter.kt | 2 +- .../features/login/impl/di/LoginModule.kt | 2 +- .../login/impl/di/QrCodeLoginComponent.kt | 4 +- .../features/login/impl/login/LoginHelper.kt | 2 +- .../impl/qrcode/DefaultQrCodeLoginManager.kt | 4 +- .../login/impl/resolver/HomeserverResolver.kt | 2 +- .../ChangeAccountProviderNode.kt | 2 +- .../ChangeAccountProviderPresenter.kt | 2 +- .../ChooseAccountProviderNode.kt | 2 +- .../ChooseAccountProviderPresenter.kt | 2 +- .../ConfirmAccountProviderNode.kt | 2 +- .../createaccount/CreateAccountNode.kt | 2 +- .../screens/createaccount/MessageParser.kt | 6 +- .../loginpassword/LoginPasswordNode.kt | 2 +- .../loginpassword/LoginPasswordPresenter.kt | 3 +- .../impl/screens/onboarding/OnBoardingNode.kt | 2 +- .../qrcode/intro/QrCodeIntroPresenter.kt | 2 +- .../qrcode/scan/QrCodeScanPresenter.kt | 2 +- .../SearchAccountProviderNode.kt | 2 +- .../SearchAccountProviderPresenter.kt | 2 +- .../WebClientUrlForAuthenticationRetriever.kt | 4 +- .../logout/impl/DefaultLogoutEntryPoint.kt | 4 +- .../logout/impl/DefaultLogoutUseCase.kt | 6 +- .../features/logout/impl/LogoutPresenter.kt | 2 +- .../impl/direct/DefaultDirectLogoutView.kt | 2 +- .../impl/direct/DirectLogoutPresenter.kt | 2 +- .../impl/DefaultMessagesEntryPoint.kt | 2 +- .../features/messages/impl/MessagesNode.kt | 2 +- .../impl/actionlist/ActionListPresenter.kt | 2 +- ...faultMediaOptimizationSelectorPresenter.kt | 2 +- .../video/VideoMetadataExtractor.kt | 4 +- .../identity/IdentityChangeStatePresenter.kt | 2 +- .../VerifiedUserSendFailureFactory.kt | 2 +- ...ResolveVerifiedUserSendFailurePresenter.kt | 2 +- .../messages/impl/di/MessagesBindsModule.kt | 2 +- .../impl/draft/DefaultComposerDraftService.kt | 2 +- .../impl/draft/MatrixComposerDraftStore.kt | 2 +- .../impl/draft/VolatileComposerDraftStore.kt | 2 +- .../messages/impl/link/LinkChecker.kt | 4 +- .../messages/impl/link/LinkPresenter.kt | 2 +- .../DefaultMessageComposerContext.kt | 4 +- .../RichTextEditorStateFactory.kt | 4 +- .../RoomAliasSuggestionsDataSource.kt | 2 +- .../suggestions/SuggestionsProcessor.kt | 2 +- .../pinned/PinnedEventsTimelineProvider.kt | 4 +- .../banner/PinnedMessagesBannerItemFactory.kt | 2 +- .../banner/PinnedMessagesBannerPresenter.kt | 2 +- .../impl/threads/ThreadedMessagesNode.kt | 2 +- .../timeline/DefaultHtmlConverterProvider.kt | 4 +- .../messages/impl/timeline/MarkAsFullyRead.kt | 2 +- .../impl/timeline/TimelineController.kt | 6 +- .../impl/timeline/TimelineItemIndexer.kt | 2 +- .../customreaction/CustomReactionPresenter.kt | 2 +- .../ReactionSummaryPresenter.kt | 2 +- .../ReadReceiptBottomSheetPresenter.kt | 2 +- .../di/TimelineItemPresenterFactories.kt | 2 +- .../event/TimelineItemContentFactory.kt | 2 +- ...eItemContentFailedToParseMessageFactory.kt | 2 +- ...ineItemContentFailedToParseStateFactory.kt | 2 +- .../TimelineItemContentMessageFactory.kt | 2 +- .../event/TimelineItemContentPollFactory.kt | 2 +- ...TimelineItemContentProfileChangeFactory.kt | 2 +- .../TimelineItemContentRedactedFactory.kt | 2 +- ...imelineItemContentRoomMembershipFactory.kt | 2 +- .../event/TimelineItemContentStateFactory.kt | 2 +- .../TimelineItemContentStickerFactory.kt | 2 +- .../event/TimelineItemContentUTDFactory.kt | 2 +- .../TimelineItemDaySeparatorFactory.kt | 2 +- .../virtual/TimelineItemVirtualFactory.kt | 2 +- .../timeline/groups/TimelineItemGrouper.kt | 4 +- .../protection/TimelineProtectionPresenter.kt | 2 +- .../typing/TypingNotificationPresenter.kt | 2 +- .../impl/utils/TextPillificationHelper.kt | 2 +- .../DefaultMessageSummaryFormatter.kt | 4 +- .../DefaultVoiceMessageComposerPresenter.kt | 2 +- .../composer/VoiceMessageComposerPlayer.kt | 2 +- .../timeline/RedactedVoiceMessageManager.kt | 2 +- .../timeline/VoiceMessagePresenter.kt | 6 +- .../impl/DefaultMigrationEntryPoint.kt | 4 +- .../migration/impl/MigrationPresenter.kt | 6 +- .../impl/migrations/AppMigration01.kt | 2 +- .../impl/migrations/AppMigration02.kt | 2 +- .../impl/migrations/AppMigration03.kt | 2 +- .../impl/migrations/AppMigration04.kt | 2 +- .../impl/migrations/AppMigration05.kt | 5 +- .../impl/migrations/AppMigration06.kt | 5 +- .../impl/migrations/AppMigration07.kt | 2 +- .../impl/DefaultNetworkMonitor.kt | 8 +- .../poll/impl/actions/DefaultEndPollAction.kt | 2 +- .../actions/DefaultSendPollResponseAction.kt | 2 +- .../create/DefaultCreatePollEntryPoint.kt | 4 +- .../history/DefaultPollHistoryEntryPoint.kt | 4 +- .../poll/impl/history/PollHistoryPresenter.kt | 2 +- .../history/model/PollHistoryItemsFactory.kt | 2 +- .../model/DefaultPollContentStateFactory.kt | 2 +- .../preferences/impl/DefaultCacheService.kt | 6 +- .../impl/DefaultPreferencesEntryPoint.kt | 4 +- .../preferences/impl/about/AboutPresenter.kt | 2 +- .../advanced/AdvancedSettingsPresenter.kt | 2 +- .../advanced/MediaPreviewConfigStateStore.kt | 4 +- .../analytics/AnalyticsSettingsPresenter.kt | 2 +- .../blockedusers/BlockedUsersPresenter.kt | 2 +- .../developer/DeveloperSettingsPresenter.kt | 2 +- .../NotificationSettingsPresenter.kt | 2 +- .../SystemNotificationsEnabledProvider.kt | 4 +- .../impl/root/PreferencesRootPresenter.kt | 2 +- .../preferences/impl/root/VersionFormatter.kt | 6 +- .../impl/tasks/ClearCacheUseCase.kt | 6 +- .../impl/tasks/ComputeCacheSizeUseCase.kt | 4 +- .../utils/ShowDeveloperSettingsProvider.kt | 2 +- .../DefaultRageshakeFeatureAvailability.kt | 4 +- .../rageshake/impl/bugreport/BugReportNode.kt | 2 +- .../impl/bugreport/BugReportPresenter.kt | 2 +- .../bugreport/DefaultBugReportEntryPoint.kt | 4 +- .../crash/DefaultCrashDetectionPresenter.kt | 4 +- .../DefaultRageshakeDetectionPresenter.kt | 4 +- .../rageshake/impl/di/RageshakeModule.kt | 2 +- .../impl/logs/DefaultLogFilesRemover.kt | 4 +- .../DefaultRageshakePreferencesPresenter.kt | 4 +- .../impl/rageshake/DefaultRageShake.kt | 6 +- .../impl/reporter/BugReportAppNameProvider.kt | 4 +- .../impl/reporter/DefaultBugReporter.kt | 8 +- .../reporter/DefaultBugReporterUrlProvider.kt | 4 +- .../screenshot/DefaultScreenshotHolder.kt | 6 +- .../impl/DefaultReportRoomEntryPoint.kt | 4 +- .../features/reportroom/impl/ReportRoom.kt | 2 +- .../DefaultRoomAliasResolverEntryPoint.kt | 4 +- .../roomcall/impl/RoomCallStatePresenter.kt | 2 +- .../roomcall/impl/di/RoomCallModule.kt | 2 +- .../impl/DefaultRoomDetailsEntryPoint.kt | 4 +- .../roomdetails/impl/RoomDetailsPresenter.kt | 2 +- .../impl/edit/RoomDetailsEditPresenter.kt | 2 +- .../impl/members/RoomMemberListDataSource.kt | 2 +- .../impl/members/RoomMemberListPresenter.kt | 2 +- .../RolesAndPermissionsPresenter.kt | 2 +- .../impl/DefaultRoomDirectoryEntryPoint.kt | 4 +- .../impl/root/RoomDirectoryPresenter.kt | 2 +- .../DefaultRoomMemberModerationRenderer.kt | 2 +- .../impl/di/RoomMemberModerationModule.kt | 2 +- .../impl/DefaultSecureBackupEntryPoint.kt | 4 +- .../disable/SecureBackupDisablePresenter.kt | 2 +- .../SecureBackupEnterRecoveryKeyPresenter.kt | 2 +- .../impl/reset/ResetIdentityFlowManager.kt | 2 +- .../impl/root/SecureBackupRootPresenter.kt | 2 +- .../setup/SecureBackupSetupStateMachine.kt | 2 +- .../share/impl/DefaultShareEntryPoint.kt | 2 +- .../features/share/impl/ShareIntentHandler.kt | 4 +- .../impl/DefaultSignedOutEntryPoint.kt | 4 +- .../features/signedout/impl/SignedOutNode.kt | 2 +- .../impl/DefaultStartChatEntryPoint.kt | 4 +- .../startchat/impl/DefaultStartDMAction.kt | 2 +- .../startchat/impl/root/StartChatPresenter.kt | 2 +- .../impl/userlist/DefaultUserListPresenter.kt | 2 +- .../impl/userlist/UserListDataStore.kt | 2 +- .../impl/DefaultUserProfileEntryPoint.kt | 4 +- .../DefaultUserProfilePresenterFactory.kt | 2 +- .../DefaultIncomingVerificationEntryPoint.kt | 4 +- .../IncomingVerificationStateMachine.kt | 2 +- .../DefaultOutgoingVerificationEntryPoint.kt | 4 +- .../outgoing/OutgoingVerificationPresenter.kt | 30 +---- .../viewfolder/impl/DefaultTextFileViewer.kt | 4 +- .../impl/DefaultViewFolderEntryPoint.kt | 4 +- .../viewfolder/impl/file/FileContentReader.kt | 4 +- .../features/viewfolder/impl/file/FileSave.kt | 4 +- .../viewfolder/impl/file/FileShare.kt | 4 +- .../viewfolder/impl/file/ViewFileNode.kt | 2 +- .../viewfolder/impl/folder/FolderExplorer.kt | 4 +- .../viewfolder/impl/folder/ViewFolderNode.kt | 2 +- .../impl/folder/ViewFolderPresenter.kt | 52 ++++---- .../impl/root/ViewFolderRootNode.kt | 2 +- .../clipboard/AndroidClipboardHelper.kt | 2 +- .../androidutils/file/TemporaryUriDeleter.kt | 2 +- .../filesize/AndroidFileSizeFormatter.kt | 2 +- .../androidutils/system/DateTimeObserver.kt | 2 +- .../libraries/architecture/NodeFactories.kt | 5 +- .../libraries/audio/impl/DefaultAudioFocus.kt | 2 +- .../impl/AESEncryptionDecryptionService.kt | 4 +- .../cryptography/impl/CryptographyModule.kt | 2 +- .../impl/KeyStoreSecretKeyRepository.kt | 4 +- .../dateformatter/impl/DateFormatterDay.kt | 4 +- .../dateformatter/impl/DateFormatterFull.kt | 2 +- .../dateformatter/impl/DateFormatterMonth.kt | 2 +- .../dateformatter/impl/DateFormatters.kt | 2 +- .../impl/DefaultDateFormatter.kt | 4 +- .../impl/LocalDateTimeProvider.kt | 2 +- .../impl/LocaleChangeObserver.kt | 6 +- .../impl/di/DateFormatterModule.kt | 2 +- .../android/libraries/di/BaseDirectory.kt | 2 +- .../DefaultPinnedMessagesBannerFormatter.kt | 2 +- .../impl/DefaultRoomLastMessageFormatter.kt | 2 +- .../impl/DefaultTimelineEventFormatter.kt | 2 +- .../impl/ProfileChangeContentFormatter.kt | 2 +- .../impl/RoomMembershipContentFormatter.kt | 2 +- .../impl/StateContentFormatter.kt | 2 +- .../impl/DefaultFeatureFlagService.kt | 6 +- .../featureflag/impl/di/FeatureFlagModule.kt | 2 +- .../impl/di/FullScreenIntentModule.kt | 2 +- .../indicator/impl/DefaultIndicatorService.kt | 2 +- .../matrix/api/user/CurrentSessionIdHolder.kt | 4 +- .../matrix/impl/ClientBuilderProvider.kt | 4 +- .../matrix/impl/RustMatrixClientFactory.kt | 9 +- .../libraries/matrix/impl/RustSdkMetadata.kt | 4 +- .../impl/auth/OidcConfigurationProvider.kt | 2 +- .../auth/RustMatrixAuthenticationService.kt | 6 +- .../qrlogin/RustQrCodeLoginDataFactory.kt | 6 +- .../DefaultUserCertificatesProvider.kt | 4 +- .../impl/keys/DefaultPassphraseGenerator.kt | 4 +- .../matrix/impl/paths/SessionPathsFactory.kt | 9 +- .../permalink/DefaultMatrixToConverter.kt | 4 +- .../impl/permalink/DefaultPermalinkBuilder.kt | 6 +- .../impl/permalink/DefaultPermalinkParser.kt | 6 +- .../impl/platform/RustInitPlatformService.kt | 4 +- .../matrix/impl/proxy/DefaultProxyProvider.kt | 4 +- .../room/TimelineEventTypeFilterFactory.kt | 4 +- .../impl/room/alias/DefaultRoomAliasHelper.kt | 4 +- .../matrix/impl/room/join/DefaultJoinRoom.kt | 2 +- .../impl/server/DefaultUserServerResolver.kt | 2 +- .../matrix/impl/tracing/RustTracingService.kt | 6 +- .../DefaultCallWidgetSettingsProvider.kt | 4 +- .../matrix/ui/media/ImageLoaderFactories.kt | 6 +- .../matrix/ui/media/ImageLoaderHolder.kt | 4 +- .../ui/messages/RoomMemberProfilesCache.kt | 4 +- .../matrix/ui/messages/RoomNamesCache.kt | 4 +- .../matrix/ui/room/LoadingRoomState.kt | 2 +- .../impl/DefaultPickerProvider.kt | 2 +- .../mediaplayer/impl/DefaultMediaPlayer.kt | 4 +- .../mediaplayer/impl/SimplePlayer.kt | 2 +- .../mediaupload/api/MaxUploadSizeProvider.kt | 2 +- .../impl/AndroidMediaPreProcessor.kt | 4 +- .../DefaultMediaOptimizationConfigProvider.kt | 2 +- .../mediaupload/impl/ImageCompressor.kt | 2 +- .../mediaupload/impl/ThumbnailFactory.kt | 2 +- .../mediaupload/impl/VideoCompressor.kt | 2 +- .../impl/DefaultMediaGalleryEntryPoint.kt | 6 +- .../impl/DefaultMediaViewerEntryPoint.kt | 4 +- .../impl/datasource/EventItemFactory.kt | 2 +- ...edTimelineMediaGalleryDataSourceFactory.kt | 2 +- .../impl/datasource/MediaGalleryDataSource.kt | 4 +- .../datasource/MediaItemsPostProcessor.kt | 2 +- .../impl/datasource/MediaTimeline.kt | 4 +- .../datasource/TimelineMediaItemsFactory.kt | 2 +- .../impl/datasource/VirtualItemFactory.kt | 2 +- .../gallery/voice/VoiceMessagePresenter.kt | 6 +- .../impl/local/AndroidLocalMediaActions.kt | 4 +- .../impl/local/AndroidLocalMediaFactory.kt | 4 +- .../impl/local/DefaultLocalMediaRenderer.kt | 4 +- .../FileExtensionExtractorWithValidation.kt | 4 +- .../impl/viewer/PagerKeysHandler.kt | 2 +- .../libraries/network/NetworkModule.kt | 4 +- .../interceptors/UserAgentInterceptor.kt | 2 +- .../useragent/DefaultUserAgentProvider.kt | 8 +- .../oidc/impl/DefaultOidcActionFlow.kt | 4 +- .../oidc/impl/DefaultOidcIntentResolver.kt | 4 +- .../libraries/oidc/impl/OidcUrlParser.kt | 4 +- .../AccompanistPermissionStateProvider.kt | 2 +- .../impl/DefaultPermissionStateProvider.kt | 6 +- .../impl/DefaultPermissionsPresenter.kt | 4 +- .../impl/action/AndroidPermissionActions.kt | 6 +- ...ficationTroubleshootCheckPermissionTest.kt | 4 +- .../DefaultSessionPreferencesStoreFactory.kt | 6 +- .../impl/DefaultGetCurrentPushProvider.kt | 4 +- .../libraries/push/impl/DefaultPushService.kt | 6 +- .../push/impl/DefaultPusherSubscriber.kt | 4 +- .../push/impl/battery/BatteryOptimization.kt | 4 +- .../battery/BatteryOptimizationPresenter.kt | 2 +- .../libraries/push/impl/di/PushModule.kt | 4 +- .../impl/history/DefaultPushHistoryService.kt | 4 +- .../push/impl/history/di/PushHistoryModule.kt | 4 +- .../ActiveNotificationsProvider.kt | 6 +- .../CallNotificationEventResolver.kt | 6 +- .../DefaultNotifiableEventResolver.kt | 6 +- .../DefaultNotificationBitmapLoader.kt | 4 +- .../DefaultNotificationDrawerManager.kt | 6 +- .../DefaultOnMissedCallNotificationHandler.kt | 4 +- .../FallbackNotificationFactory.kt | 2 +- .../notifications/NotificationActionIds.kt | 5 +- .../NotificationBroadcastReceiver.kt | 2 +- .../NotificationBroadcastReceiverBindings.kt | 2 +- .../NotificationBroadcastReceiverHandler.kt | 2 +- .../notifications/NotificationDataFactory.kt | 4 +- .../notifications/NotificationDisplayer.kt | 4 +- .../notifications/NotificationMediaRepo.kt | 7 +- .../notifications/NotificationRenderer.kt | 2 +- .../NotificationResolverQueue.kt | 2 +- .../notifications/ReplyMessageExtractor.kt | 2 +- .../notifications/RoomGroupMessageCreator.kt | 4 +- .../SummaryGroupMessageCreator.kt | 4 +- .../notifications/TestNotificationReceiver.kt | 2 +- .../TestNotificationReceiverBinding.kt | 2 +- .../channels/NotificationChannels.kt | 6 +- .../DefaultNotificationConversationService.kt | 8 +- .../factories/NotificationCreator.kt | 4 +- .../factories/PendingIntentFactory.kt | 2 +- .../action/AcceptInvitationActionFactory.kt | 2 +- .../action/MarkAsReadActionFactory.kt | 2 +- .../action/QuickReplyActionFactory.kt | 2 +- .../action/RejectInvitationActionFactory.kt | 2 +- .../push/impl/push/DefaultPushHandler.kt | 6 +- .../push/impl/push/IncrementPushDataStore.kt | 4 +- .../push/MutableBatteryOptimizationStore.kt | 4 +- .../impl/push/OnNotifiableEventReceived.kt | 4 +- .../push/impl/push/OnRedactedEventReceived.kt | 6 +- .../push/impl/push/SyncOnNotifiableEvent.kt | 2 +- .../impl/pushgateway/PushGatewayApiFactory.kt | 4 +- .../pushgateway/PushGatewayNotifyRequest.kt | 4 +- .../libraries/push/impl/test/TestPush.kt | 6 +- .../troubleshoot/CurrentPushProviderTest.kt | 2 +- .../troubleshoot/DiagnosticPushHandler.kt | 2 +- .../troubleshoot/NotificationClickHandler.kt | 2 +- .../impl/troubleshoot/NotificationTest.kt | 2 +- .../impl/troubleshoot/PushLoopbackTest.kt | 2 +- .../impl/troubleshoot/PushProvidersTest.kt | 2 +- .../firebase/FirebaseGatewayProvider.kt | 4 +- .../firebase/FirebaseNewTokenHandler.kt | 4 +- .../firebase/FirebasePushParser.kt | 2 +- .../firebase/FirebasePushProvider.kt | 2 +- .../pushproviders/firebase/FirebaseStore.kt | 4 +- .../firebase/FirebaseTokenDeleter.kt | 4 +- .../firebase/FirebaseTokenGetter.kt | 4 +- .../firebase/FirebaseTokenRotator.kt | 4 +- .../firebase/FirebaseTroubleshooter.kt | 4 +- .../firebase/IsPlayServiceAvailable.kt | 4 +- .../VectorFirebaseMessagingService.kt | 2 +- .../VectorFirebaseMessagingServiceBindings.kt | 2 +- .../troubleshoot/FirebaseAvailabilityTest.kt | 2 +- .../troubleshoot/FirebaseTokenTest.kt | 2 +- .../DefaultPushGatewayHttpUrlProvider.kt | 4 +- .../unifiedpush/GuardServiceStarter.kt | 2 +- .../unifiedpush/RegisterUnifiedPushUseCase.kt | 4 +- .../unifiedpush/UnifiedPushApiFactory.kt | 4 +- ...nifiedPushCurrentUserPushConfigProvider.kt | 4 +- .../UnifiedPushDistributorProvider.kt | 6 +- .../unifiedpush/UnifiedPushGatewayResolver.kt | 4 +- .../UnifiedPushGatewayUrlResolver.kt | 2 +- .../UnifiedPushNewGatewayHandler.kt | 4 +- .../unifiedpush/UnifiedPushParser.kt | 2 +- .../unifiedpush/UnifiedPushProvider.kt | 4 +- .../unifiedpush/UnifiedPushStore.kt | 4 +- .../UnregisterUnifiedPushUseCase.kt | 4 +- .../VectorUnifiedPushMessagingReceiver.kt | 5 +- ...torUnifiedPushMessagingReceiverBindings.kt | 2 +- .../EndpointRegistrationHandler.kt | 2 +- .../OpenDistributorWebPageAction.kt | 6 +- .../UnifiedPushMatrixGatewayTest.kt | 2 +- .../troubleshoot/UnifiedPushTest.kt | 2 +- .../impl/DefaultUserPushStoreFactory.kt | 6 +- .../clientsecret/DefaultPushClientSecret.kt | 4 +- .../DefaultPushClientSecretFactory.kt | 4 +- .../impl/DefaultRoomSelectEntryPoint.kt | 2 +- .../impl/RoomSelectSearchDataSource.kt | 2 +- .../impl/DatabaseSessionStore.kt | 6 +- .../impl/di/SessionStorageModule.kt | 4 +- .../impl/observer/DefaultSessionObserver.kt | 6 +- .../mentions/MentionSpanFormatter.kt | 2 +- .../mentions/MentionSpanProvider.kt | 5 +- .../textcomposer/mentions/MentionSpanTheme.kt | 4 +- .../mentions/MentionSpanUpdater.kt | 2 +- ...faultNotificationTroubleShootEntryPoint.kt | 6 +- .../TroubleshootNotificationsPresenter.kt | 2 +- .../impl/TroubleshootTestSuite.kt | 2 +- .../history/DefaultPushHistoryEntryPoint.kt | 6 +- .../impl/history/PushHistoryPresenter.kt | 2 +- .../impl/MatrixUserListDataSource.kt | 2 +- .../usersearch/impl/MatrixUserRepository.kt | 2 +- .../DefaultVoiceMessagePresenterFactory.kt | 2 +- .../voiceplayer/impl/VoiceMessageMediaRepo.kt | 5 +- .../voiceplayer/impl/VoiceMessagePlayer.kt | 2 +- .../impl/DefaultVoiceRecorder.kt | 4 +- .../impl/audio/DBovAudioLevelCalculator.kt | 2 +- .../impl/audio/DefaultEncoder.kt | 4 +- .../impl/file/DefaultVoiceFileManager.kt | 5 +- .../impl/DefaultSessionWellknownRetriever.kt | 2 +- .../impl/DefaultWellknownRetriever.kt | 6 +- .../analytics/impl/DefaultAnalyticsService.kt | 8 +- .../analytics/impl/DefaultScreenTracker.kt | 4 +- .../analytics/noop/NoopAnalyticsService.kt | 6 +- .../analytics/noop/NoopScreenTracker.kt | 6 +- .../posthog/PostHogFactory.kt | 2 +- .../posthog/PosthogAnalyticsProvider.kt | 4 +- .../posthog/PosthogEndpointConfigProvider.kt | 2 +- .../sentry/SentryAnalyticsProvider.kt | 2 +- .../impl/DefaultAppErrorStateService.kt | 4 +- .../appnavstate/api/ActiveRoomsHolder.kt | 2 +- .../impl/DefaultAppNavigationStateService.kt | 6 +- .../appnavstate/impl/di/AppNavStateModule.kt | 2 +- .../intent/DefaultExternalIntentLauncher.kt | 4 +- .../sdk/DefaultBuildVersionSdkIntProvider.kt | 4 +- .../impl/strings/AndroidStringProvider.kt | 4 +- .../impl/systemclock/DefaultSystemClock.kt | 4 +- .../toolbox/impl/systemclock/TimeModule.kt | 2 +- 505 files changed, 888 insertions(+), 930 deletions(-) diff --git a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt index cc56e15f03..7ce488056c 100644 --- a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt +++ b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt @@ -10,7 +10,6 @@ package io.element.android.x import android.app.Application import androidx.startup.AppInitializer import dev.zacsweers.metro.asContribution -import dev.zacsweers.metro.createGraphFactory import io.element.android.features.cachecleaner.api.CacheCleanerInitializer import io.element.android.libraries.di.DaggerComponentOwner import io.element.android.x.di.AppComponent diff --git a/app/src/main/kotlin/io/element/android/x/MainNode.kt b/app/src/main/kotlin/io/element/android/x/MainNode.kt index fa0b7eafc2..e8511252d2 100644 --- a/app/src/main/kotlin/io/element/android/x/MainNode.kt +++ b/app/src/main/kotlin/io/element/android/x/MainNode.kt @@ -21,8 +21,8 @@ import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.plugin.Plugin import io.element.android.appnav.RootFlowNode import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.DaggerComponentOwner +import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize diff --git a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt index 3f6f21d2c9..5c74510e49 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt @@ -7,6 +7,7 @@ package io.element.android.x.di +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesTo import io.element.android.features.api.MigrationEntryPoint import io.element.android.features.enterprise.api.EnterpriseService @@ -15,7 +16,6 @@ import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher -import dev.zacsweers.metro.AppScope import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.matrix.api.platform.InitPlatformService import io.element.android.libraries.matrix.api.tracing.TracingService diff --git a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt b/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt index ba6b24b499..e56e10f87f 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt @@ -8,11 +8,11 @@ package io.element.android.x.di import android.content.Context +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.GraphExtension import dev.zacsweers.metro.Provides import io.element.android.libraries.architecture.NodeFactoriesBindings -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext @GraphExtension(AppScope::class) diff --git a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt index fe1991e937..55d5245735 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt @@ -11,10 +11,11 @@ import android.content.Context import android.content.SharedPreferences import android.content.res.Resources import androidx.preference.PreferenceManager +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo -import dev.zacsweers.metro.Named import dev.zacsweers.metro.Provides +import dev.zacsweers.metro.SingleIn import io.element.android.appconfig.ApplicationConfig import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.messages.impl.timeline.components.customreaction.DefaultEmojibaseProvider @@ -24,11 +25,10 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher -import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext +import io.element.android.libraries.di.BaseDirectory import io.element.android.libraries.di.CacheDirectory -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.x.BuildConfig import io.element.android.x.R import kotlinx.coroutines.CoroutineName @@ -42,13 +42,13 @@ import java.io.File @ContributesTo(AppScope::class) object AppModule { @Provides - @Named("baseDirectory") + @BaseDirectory fun providesBaseDirectory(@ApplicationContext context: Context): File { return File(context.filesDir, "sessions") } @Provides - @Named("cacheDirectory") + @CacheDirectory fun providesCacheDirectory(@ApplicationContext context: Context): File { return context.cacheDir } diff --git a/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt b/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt index 9ed199b619..8198d9a0ac 100644 --- a/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt +++ b/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt @@ -8,10 +8,10 @@ package io.element.android.x.di import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.appnav.di.RoomComponentFactory import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.room.JoinedRoom -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt b/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt index 575fd048a6..eb23e5c714 100644 --- a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt +++ b/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt @@ -11,7 +11,6 @@ import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.GraphExtension import dev.zacsweers.metro.Provides import io.element.android.libraries.architecture.NodeFactoriesBindings -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.room.BaseRoom diff --git a/app/src/main/kotlin/io/element/android/x/oidc/DefaultOidcRedirectUrlProvider.kt b/app/src/main/kotlin/io/element/android/x/oidc/DefaultOidcRedirectUrlProvider.kt index 1422a95cd2..20ac5c2476 100644 --- a/app/src/main/kotlin/io/element/android/x/oidc/DefaultOidcRedirectUrlProvider.kt +++ b/app/src/main/kotlin/io/element/android/x/oidc/DefaultOidcRedirectUrlProvider.kt @@ -7,12 +7,12 @@ package io.element.android.x.oidc -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.auth.OidcRedirectUrlProvider import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.x.R -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt index 26dd4c031a..7b5f85f521 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt @@ -22,6 +22,7 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode @@ -29,7 +30,6 @@ import io.element.android.appnav.di.SessionComponentFactory import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.DaggerComponentOwner import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInEventProcessor.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInEventProcessor.kt index 7dd3ca0c57..5444b5c465 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInEventProcessor.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInEventProcessor.kt @@ -7,6 +7,7 @@ package io.element.android.appnav +import dev.zacsweers.metro.Inject import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage import io.element.android.libraries.matrix.api.room.RoomMembershipObserver @@ -18,7 +19,6 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import dev.zacsweers.metro.Inject @Inject class LoggedInEventProcessor( diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt index 85c47f25ae..a39d587e4d 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt @@ -36,6 +36,7 @@ import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.replace import com.bumble.appyx.navmodel.backstack.operation.singleTop +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.JoinedRoom @@ -66,9 +67,7 @@ import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.waitForNavTargetAttached -import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.MatrixClient @@ -562,7 +561,6 @@ class LoggedInFlowNode( } } } - } @ContributesNode(AppScope::class) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt index 8a4c71d23a..d5aa51291b 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt @@ -20,6 +20,7 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode @@ -31,7 +32,6 @@ import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs import io.element.android.libraries.designsystem.utils.ForceOrientationInMobileDevices import io.element.android.libraries.designsystem.utils.ScreenOrientation -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.ui.media.NotLoggedInImageLoaderFactory import kotlinx.parcelize.Parcelize diff --git a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt index 4ea4506efb..8e727ad49b 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/RootFlowNode.kt @@ -23,6 +23,7 @@ import com.bumble.appyx.core.state.MutableSavedStateMap import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.JoinedRoom @@ -46,7 +47,6 @@ import io.element.android.libraries.architecture.waitForChildAttached import io.element.android.libraries.core.uri.ensureProtocol import io.element.android.libraries.deeplink.api.DeeplinkData import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias diff --git a/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt b/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt index da0bab09ad..78b9617eae 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/di/MatrixSessionCache.kt @@ -10,8 +10,9 @@ package io.element.android.appnav.di import androidx.annotation.VisibleForTesting import com.bumble.appyx.core.state.MutableSavedStateMap import com.bumble.appyx.core.state.SavedStateMap -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClientProvider @@ -22,7 +23,6 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber import java.util.concurrent.ConcurrentHashMap -import dev.zacsweers.metro.Inject private const val SAVE_INSTANCE_KEY = "io.element.android.x.di.MatrixClientsHolder.SaveInstanceKey" diff --git a/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt b/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt index 85c8a23c07..187b8f84b6 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/intent/IntentResolver.kt @@ -8,6 +8,7 @@ package io.element.android.appnav.intent import android.content.Intent +import dev.zacsweers.metro.Inject import io.element.android.features.login.api.LoginIntentResolver import io.element.android.features.login.api.LoginParams import io.element.android.libraries.deeplink.api.DeeplinkData @@ -17,7 +18,6 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkParser import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcIntentResolver import timber.log.Timber -import dev.zacsweers.metro.Inject sealed interface ResolvedIntent { data class Navigation(val deeplinkData: DeeplinkData) : ResolvedIntent diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt index f04e99ffef..1f8be2f673 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/LoggedInPresenter.kt @@ -17,6 +17,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.CryptoSessionStateChange import im.vector.app.features.analytics.plan.UserProperties import io.element.android.libraries.architecture.AsyncData @@ -42,7 +43,6 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject private val pusherTag = LoggerTag("Pusher", LoggerTag.PushLoggerTag) diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/MediaPreviewConfigMigration.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/MediaPreviewConfigMigration.kt index a85304000f..7916d48171 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/MediaPreviewConfigMigration.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/MediaPreviewConfigMigration.kt @@ -7,6 +7,7 @@ package io.element.android.appnav.loggedin +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.media.MediaPreviewService import io.element.android.libraries.preferences.api.store.AppPreferencesStore @@ -14,7 +15,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject /** * This migration is temporary, will be safe to remove after some time. diff --git a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt index 2e4218be88..bb485fd646 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/loggedin/SendQueues.kt @@ -8,9 +8,10 @@ package io.element.android.appnav.loggedin import androidx.annotation.VisibleForTesting +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.networkmonitor.api.NetworkStatus import io.element.android.libraries.di.SessionScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.sync.SyncService import io.element.android.libraries.matrix.api.sync.SyncState @@ -21,7 +22,6 @@ import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import timber.log.Timber -import dev.zacsweers.metro.Inject @VisibleForTesting const val SEND_QUEUES_RETRY_DELAY_MILLIS = 500L diff --git a/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt b/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt index 965ca2dbe1..962bac614b 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/root/RootNavStateFlowFactory.kt @@ -9,6 +9,7 @@ package io.element.android.appnav.root import com.bumble.appyx.core.state.MutableSavedStateMap import com.bumble.appyx.core.state.SavedStateMap +import dev.zacsweers.metro.Inject import io.element.android.appnav.di.MatrixSessionCache import io.element.android.features.preferences.api.CacheService import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService @@ -18,7 +19,6 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.onEach -import dev.zacsweers.metro.Inject private const val SAVE_INSTANCE_KEY = "io.element.android.x.RootNavStateFlowFactory.SAVE_INSTANCE_KEY" diff --git a/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt b/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt index 82012297dc..d987c2a7ec 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/root/RootPresenter.kt @@ -11,6 +11,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.SuperProperties import io.element.android.features.rageshake.api.crash.CrashDetectionState import io.element.android.features.rageshake.api.detection.RageshakeDetectionState @@ -18,7 +19,6 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.SdkMetadata import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.apperror.api.AppErrorStateService -import dev.zacsweers.metro.Inject @Inject class RootPresenter( diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt index 9c8ab391cb..46e1b10bb9 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt @@ -14,13 +14,13 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.appconfig.AnalyticsConfig import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.androidutils.browser.openUrlInChromeCustomTab -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInPresenter.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInPresenter.kt index 26624bf60d..fd590955c8 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInPresenter.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInPresenter.kt @@ -9,6 +9,7 @@ package io.element.android.features.analytics.impl import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.appconfig.AnalyticsConfig import io.element.android.features.analytics.api.AnalyticsOptInEvents import io.element.android.libraries.architecture.Presenter @@ -16,7 +17,6 @@ import io.element.android.libraries.core.meta.BuildMeta import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class AnalyticsOptInPresenter( diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt index d2ee2a5f94..cfc0dec548 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt @@ -9,11 +9,11 @@ package io.element.android.features.analytics.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.analytics.api.AnalyticsEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject 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/AnalyticsModule.kt index e41d3db8cd..e5d3342e2d 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/AnalyticsModule.kt @@ -7,13 +7,13 @@ package io.element.android.features.analytics.impl.di +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import io.element.android.features.analytics.api.preferences.AnalyticsPreferencesState import io.element.android.features.analytics.impl.preferences.AnalyticsPreferencesPresenter import io.element.android.libraries.architecture.Presenter -import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) @BindingContainer diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/preferences/AnalyticsPreferencesPresenter.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/preferences/AnalyticsPreferencesPresenter.kt index cd0f99b4a6..fee6188d23 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/preferences/AnalyticsPreferencesPresenter.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/preferences/AnalyticsPreferencesPresenter.kt @@ -10,6 +10,7 @@ package io.element.android.features.analytics.impl.preferences import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.appconfig.AnalyticsConfig import io.element.android.features.analytics.api.AnalyticsOptInEvents import io.element.android.features.analytics.api.preferences.AnalyticsPreferencesState @@ -18,7 +19,6 @@ import io.element.android.libraries.core.meta.BuildMeta import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class AnalyticsPreferencesPresenter( diff --git a/features/cachecleaner/api/src/main/kotlin/io/element/android/features/cachecleaner/api/CacheCleanerBindings.kt b/features/cachecleaner/api/src/main/kotlin/io/element/android/features/cachecleaner/api/CacheCleanerBindings.kt index 30e3b99f7b..9be2a10525 100644 --- a/features/cachecleaner/api/src/main/kotlin/io/element/android/features/cachecleaner/api/CacheCleanerBindings.kt +++ b/features/cachecleaner/api/src/main/kotlin/io/element/android/features/cachecleaner/api/CacheCleanerBindings.kt @@ -7,8 +7,8 @@ package io.element.android.features.cachecleaner.api -import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesTo @ContributesTo(AppScope::class) interface CacheCleanerBindings { diff --git a/features/cachecleaner/impl/src/main/kotlin/io/element/android/features/cachecleaner/impl/DefaultCacheCleaner.kt b/features/cachecleaner/impl/src/main/kotlin/io/element/android/features/cachecleaner/impl/DefaultCacheCleaner.kt index 92ddb06bd1..fc06174806 100644 --- a/features/cachecleaner/impl/src/main/kotlin/io/element/android/features/cachecleaner/impl/DefaultCacheCleaner.kt +++ b/features/cachecleaner/impl/src/main/kotlin/io/element/android/features/cachecleaner/impl/DefaultCacheCleaner.kt @@ -7,19 +7,18 @@ package io.element.android.features.cachecleaner.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.cachecleaner.api.CacheCleaner import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber import java.io.File -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Named /** * Default implementation of [CacheCleaner]. @@ -30,7 +29,7 @@ class DefaultCacheCleaner( @AppCoroutineScope private val coroutineScope: CoroutineScope, private val dispatchers: CoroutineDispatchers, - @Named("cacheDirectory") private val cacheDir: File, + @CacheDirectory private val cacheDir: File, ) : CacheCleaner { companion object { val SUBDIRS_TO_CLEANUP = listOf("temp/media", "temp/voice") diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/DefaultElementCallEntryPoint.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/DefaultElementCallEntryPoint.kt index e58059e8a1..3b937dbf92 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/DefaultElementCallEntryPoint.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/DefaultElementCallEntryPoint.kt @@ -8,17 +8,17 @@ package io.element.android.features.call.impl import android.content.Context +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.call.api.CallType import io.element.android.features.call.api.ElementCallEntryPoint import io.element.android.features.call.impl.notifications.CallNotificationData import io.element.android.features.call.impl.utils.ActiveCallManager import io.element.android.features.call.impl.utils.IntentProvider -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/di/CallBindings.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/di/CallBindings.kt index 729ce3a4cc..887da8d188 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/di/CallBindings.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/di/CallBindings.kt @@ -7,11 +7,11 @@ package io.element.android.features.call.impl.di +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesTo import io.element.android.features.call.impl.receivers.DeclineCallBroadcastReceiver import io.element.android.features.call.impl.ui.ElementCallActivity import io.element.android.features.call.impl.ui.IncomingCallActivity -import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) interface CallBindings { diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/notifications/RingingCallNotificationCreator.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/notifications/RingingCallNotificationCreator.kt index b2521adaf7..988105ae06 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/notifications/RingingCallNotificationCreator.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/notifications/RingingCallNotificationCreator.kt @@ -15,6 +15,7 @@ import android.provider.Settings import androidx.core.app.NotificationCompat import androidx.core.app.PendingIntentCompat import androidx.core.app.Person +import dev.zacsweers.metro.Inject import io.element.android.appconfig.ElementCallConfig import io.element.android.features.call.api.CallType import io.element.android.features.call.impl.receivers.DeclineCallBroadcastReceiver @@ -29,7 +30,6 @@ import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder import io.element.android.libraries.push.api.notifications.NotificationBitmapLoader -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds /** 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 278570bf23..8cca46f9f4 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 @@ -13,12 +13,12 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.call.impl.utils.PipController import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.log.logger.LoggerTag import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("PiP") diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt index 8ffa1c4437..96e68fabf3 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt @@ -11,11 +11,11 @@ import android.content.Context import android.content.pm.PackageManager import android.os.Build import androidx.annotation.ChecksSdkIntAtLeast -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.bool.orFalse import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.bool.orFalse +import io.element.android.libraries.di.annotations.ApplicationContext interface PipSupportProvider { @ChecksSdkIntAtLeast(Build.VERSION_CODES.O) diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/receivers/DeclineCallBroadcastReceiver.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/receivers/DeclineCallBroadcastReceiver.kt index 0df100b3a0..22b5f0477d 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/receivers/DeclineCallBroadcastReceiver.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/receivers/DeclineCallBroadcastReceiver.kt @@ -11,6 +11,7 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import androidx.core.content.IntentCompat +import dev.zacsweers.metro.Inject import io.element.android.features.call.api.CallType import io.element.android.features.call.impl.di.CallBindings import io.element.android.features.call.impl.notifications.CallNotificationData @@ -19,7 +20,6 @@ import io.element.android.libraries.architecture.bindings import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject /** * Broadcast receiver to decline the incoming call. 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 e76c048c79..0169029359 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 @@ -30,6 +30,7 @@ import androidx.core.app.PictureInPictureModeChangedInfo import androidx.core.content.IntentCompat import androidx.core.util.Consumer import androidx.lifecycle.Lifecycle +import dev.zacsweers.metro.Inject import io.element.android.features.call.api.CallType import io.element.android.features.call.api.CallType.ExternalUrl import io.element.android.features.call.impl.DefaultElementCallEntryPoint @@ -50,7 +51,6 @@ import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.theme.ElementThemeApp import io.element.android.libraries.preferences.api.store.AppPreferencesStore import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("ElementCallActivity") diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt index 288c1df530..f6357e5dfb 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt @@ -13,6 +13,7 @@ import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity import androidx.core.content.IntentCompat import androidx.lifecycle.lifecycleScope +import dev.zacsweers.metro.Inject import io.element.android.features.call.api.CallType import io.element.android.features.call.api.ElementCallEntryPoint import io.element.android.features.call.impl.di.CallBindings @@ -30,7 +31,6 @@ import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject /** * Activity that's displayed as a full screen intent when an incoming call is received. diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt index 21cc3af6b9..df2dc77d02 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt @@ -9,8 +9,8 @@ package io.element.android.features.call.impl.ui import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalConfiguration -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject interface LanguageTagProvider { diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt index b6ce7ecaf1..54a5e567c8 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/ActiveCallManager.kt @@ -15,17 +15,18 @@ import androidx.core.app.NotificationManagerCompat import androidx.core.content.getSystemService import coil3.SingletonImageLoader import coil3.annotation.DelicateCoilApi +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.appconfig.ElementCallConfig import io.element.android.features.call.api.CallType import io.element.android.features.call.api.CurrentCall import io.element.android.features.call.impl.notifications.CallNotificationData import io.element.android.features.call.impl.notifications.RingingCallNotificationCreator import io.element.android.libraries.core.extensions.runCatchingExceptions -import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder @@ -52,7 +53,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds /** diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt index 98aefc532f..3cb510db60 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt @@ -7,11 +7,11 @@ package io.element.android.features.call.impl.utils -import dev.zacsweers.metro.ContributesBinding -import io.element.android.features.call.impl.BuildConfig import dev.zacsweers.metro.AppScope -import io.element.android.libraries.matrix.api.widget.CallAnalyticCredentialsProvider +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.features.call.impl.BuildConfig +import io.element.android.libraries.matrix.api.widget.CallAnalyticCredentialsProvider @ContributesBinding(AppScope::class) @Inject diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt index 545bf893e9..77d98d12af 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallWidgetProvider.kt @@ -7,9 +7,10 @@ package io.element.android.features.call.impl.utils -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.extensions.runCatchingExceptions import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -18,7 +19,6 @@ import io.element.android.libraries.matrix.api.widget.CallWidgetSettingsProvider import io.element.android.libraries.preferences.api.store.AppPreferencesStore import io.element.android.services.appnavstate.api.ActiveRoomsHolder import kotlinx.coroutines.flow.firstOrNull -import dev.zacsweers.metro.Inject private const val EMBEDDED_CALL_WIDGET_BASE_URL = "https://appassets.androidplatform.net/element-call/index.html" diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt index bad2b830ca..9d577f4ce9 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt @@ -7,13 +7,13 @@ package io.element.android.features.call.impl.utils +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.call.api.CurrentCall import io.element.android.features.call.api.CurrentCallService -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableStateFlow -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt index 4040db5532..53c3bedf7f 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt @@ -10,12 +10,12 @@ package io.element.android.features.changeroommemberroles.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRolesEntryPoint import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRolesListType import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.room.JoinedRoom -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/RoomMemberListDataSource.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/RoomMemberListDataSource.kt index b9d45ab844..a27833122a 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/RoomMemberListDataSource.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/RoomMemberListDataSource.kt @@ -7,13 +7,13 @@ package io.element.android.features.changeroommemberroles.impl +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.roomMembers import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject @Inject class RoomMemberListDataSource( diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt index dde6d4a186..6058a6de6f 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt @@ -11,10 +11,10 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.createroom.api.CreateRoomEntryPoint import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.SessionScope -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt index 954cb5baa9..29b9842abe 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt @@ -17,6 +17,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.CreatedRoom import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter @@ -44,7 +45,6 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject import kotlin.jvm.optionals.getOrDefault @Inject diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/CreateRoomConfigStore.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/CreateRoomConfigStore.kt index 5b8efe7f66..f2701216c3 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/CreateRoomConfigStore.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/CreateRoomConfigStore.kt @@ -8,13 +8,13 @@ package io.element.android.features.createroom.impl.configureroom import android.net.Uri +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.file.safeDelete import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.getAndUpdate import java.io.File -import dev.zacsweers.metro.Inject @Inject class CreateRoomConfigStore( diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt index 4452a06e45..eb751366a8 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/AccountDeactivationPresenter.kt @@ -12,13 +12,13 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runCatchingUpdatingState import io.element.android.libraries.matrix.api.MatrixClient import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class AccountDeactivationPresenter( diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt index c4f7573821..0db34dc9f3 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt @@ -9,11 +9,11 @@ package io.element.android.features.logout.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.deactivation.api.AccountDeactivationEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt index 8cf5753fe7..d0fba5ceeb 100644 --- a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt +++ b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt @@ -7,16 +7,16 @@ package io.element.android.features.enterprise.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.compound.tokens.generated.SemanticColors import io.element.android.compound.tokens.generated.compoundColorsDark import io.element.android.compound.tokens.generated.compoundColorsLight import io.element.android.features.enterprise.api.BugReportUrl import io.element.android.features.enterprise.api.EnterpriseService -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.SessionId import kotlinx.coroutines.flow.flowOf -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt index 6b757d9b0b..0c515f1b97 100644 --- a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt +++ b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt @@ -8,9 +8,9 @@ package io.element.android.features.enterprise.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.enterprise.api.SessionEnterpriseService import io.element.android.libraries.di.SessionScope -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt index 1f8e368fb4..1f9467efbc 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.ftue.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.ftue.api.FtueEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt index a5690896b5..c309dd1677 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/FtueFlowNode.kt @@ -21,6 +21,7 @@ import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.newRoot import com.bumble.appyx.navmodel.backstack.operation.replace +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode @@ -34,7 +35,6 @@ import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.SessionScope import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.flow.distinctUntilChanged @@ -158,7 +158,6 @@ class FtueFlowNode( override fun View(modifier: Modifier) { BackstackView() } - } @ContributesNode(AppScope::class) diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInNode.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInNode.kt index a5a840af0c..b2e94c5a8b 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInNode.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/notifications/NotificationsOptInNode.kt @@ -12,12 +12,12 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModePresenter.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModePresenter.kt index b316169746..e278e803c4 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModePresenter.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/sessionverification/choosemode/ChooseSelfVerificationModePresenter.kt @@ -12,12 +12,12 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember +import dev.zacsweers.metro.Inject import io.element.android.features.logout.api.direct.DirectLogoutEvents import io.element.android.features.logout.api.direct.DirectLogoutState import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.encryption.EncryptionService import io.element.android.libraries.matrix.api.encryption.RecoveryState -import dev.zacsweers.metro.Inject @Inject class ChooseSelfVerificationModePresenter( diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt index b5d8375551..43e85aa708 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/state/DefaultFtueService.kt @@ -11,11 +11,12 @@ import android.Manifest import android.os.Build import androidx.annotation.VisibleForTesting import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.ftue.api.state.FtueService import io.element.android.features.ftue.api.state.FtueState import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.libraries.di.SessionScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus @@ -31,7 +32,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @SingleIn(SessionScope::class) diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt index 91aac9f81a..2f28cb836d 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.home.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.home.api.HomeEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomePresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomePresenter.kt index 70fe169dc1..f984bcbc42 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomePresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/HomePresenter.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.home.impl.roomlist.RoomListState import io.element.android.features.logout.api.direct.DirectLogoutState import io.element.android.features.rageshake.api.RageshakeFeatureAvailability @@ -27,7 +28,6 @@ import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.indicator.api.IndicatorService import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.sync.SyncService -import dev.zacsweers.metro.Inject @Inject class HomePresenter( diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt index d977c29f20..28f7f95908 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListDataSource.kt @@ -7,6 +7,7 @@ package io.element.android.features.home.impl.datasource +import dev.zacsweers.metro.Inject import io.element.android.features.home.impl.model.RoomListRoomSummary import io.element.android.libraries.androidutils.diff.DiffCacheUpdater import io.element.android.libraries.androidutils.diff.MutableListDiffCache @@ -29,7 +30,6 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds @Inject diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt index d6ee322b03..b6f908fd5d 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/datasource/RoomListRoomSummaryFactory.kt @@ -7,6 +7,7 @@ package io.element.android.features.home.impl.datasource +import dev.zacsweers.metro.Inject import io.element.android.features.home.impl.model.RoomListRoomSummary import io.element.android.features.home.impl.model.RoomSummaryDisplayType import io.element.android.libraries.core.extensions.orEmpty @@ -20,7 +21,6 @@ import io.element.android.libraries.matrix.api.roomlist.RoomSummary import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.toInviteSender import kotlinx.collections.immutable.toImmutableList -import dev.zacsweers.metro.Inject @Inject class RoomListRoomSummaryFactory( 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/RoomListModule.kt index 0a919c1ab0..926205cbea 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/RoomListModule.kt @@ -7,8 +7,8 @@ package io.element.android.features.home.impl.di -import dev.zacsweers.metro.Binds import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import io.element.android.features.home.impl.filters.RoomListFiltersPresenter import io.element.android.features.home.impl.filters.RoomListFiltersState diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt index 2a06270ff1..07d2de96a1 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/RoomListFiltersPresenter.kt @@ -10,12 +10,12 @@ package io.element.android.features.home.impl.filters import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState +import dev.zacsweers.metro.Inject import io.element.android.features.home.impl.filters.selection.FilterSelectionStrategy import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.roomlist.RoomListService import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.flow.map -import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.roomlist.RoomListFilter as MatrixRoomListFilter @Inject diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt index c11b397701..acde851de5 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt @@ -8,10 +8,10 @@ package io.element.android.features.home.impl.filters.selection import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.home.impl.filters.RoomListFilter import io.element.android.libraries.di.SessionScope import kotlinx.coroutines.flow.MutableStateFlow -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt index e0053d9848..9c77ab816a 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/roomlist/RoomListPresenter.kt @@ -22,6 +22,7 @@ import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Interaction import io.element.android.features.home.impl.datasource.RoomListDataSource import io.element.android.features.home.impl.filters.RoomListFiltersState @@ -63,7 +64,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.takeWhile import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject private const val EXTENDED_RANGE_SIZE = 40 private const val SUBSCRIBE_TO_VISIBLE_ROOMS_DEBOUNCE_IN_MILLIS = 300L diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt index 694a252754..4cb4104637 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchDataSource.kt @@ -7,6 +7,7 @@ package io.element.android.features.home.impl.search +import dev.zacsweers.metro.Inject import io.element.android.features.home.impl.datasource.RoomListRoomSummaryFactory import io.element.android.features.home.impl.model.RoomListRoomSummary import io.element.android.libraries.core.coroutine.CoroutineDispatchers @@ -20,7 +21,6 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import dev.zacsweers.metro.Inject private const val PAGE_SIZE = 30 diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchPresenter.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchPresenter.kt index abb22ed31f..ba77b0cdce 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchPresenter.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/search/RoomListSearchPresenter.kt @@ -14,9 +14,9 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import kotlinx.collections.immutable.persistentListOf -import dev.zacsweers.metro.Inject @Inject class RoomListSearchPresenter( diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt index 02d9ad9b28..0972701435 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/AcceptInvite.kt @@ -8,6 +8,7 @@ package io.element.android.features.invite.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.libraries.core.extensions.mapFailure @@ -19,7 +20,6 @@ import io.element.android.libraries.matrix.api.exception.ClientException import io.element.android.libraries.matrix.api.exception.ErrorKind import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.push.api.notifications.NotificationCleaner -import dev.zacsweers.metro.Inject interface AcceptInvite { suspend operator fun invoke(roomId: RoomId): Result diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DeclineInvite.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DeclineInvite.kt index 0a836a4958..6c2588de7e 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DeclineInvite.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DeclineInvite.kt @@ -8,12 +8,12 @@ package io.element.android.features.invite.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.push.api.notifications.NotificationCleaner -import dev.zacsweers.metro.Inject interface DeclineInvite { suspend operator fun invoke( diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStoreFactory.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStoreFactory.kt index e830b124c8..10812eeb80 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStoreFactory.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/DefaultSeenInvitesStoreFactory.kt @@ -8,16 +8,16 @@ package io.element.android.features.invite.impl import android.content.Context -import dev.zacsweers.metro.ContributesBinding -import io.element.android.features.invite.api.SeenInvitesStore import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.features.invite.api.SeenInvitesStore +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.sessionstorage.api.observer.SessionObserver import kotlinx.coroutines.CoroutineScope import java.util.concurrent.ConcurrentHashMap -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInvitePresenter.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInvitePresenter.kt index 6a9d867065..7d15971fe4 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInvitePresenter.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/AcceptDeclineInvitePresenter.kt @@ -12,6 +12,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.features.invite.api.InviteData import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState @@ -24,7 +25,6 @@ import io.element.android.libraries.architecture.runUpdatingState import io.element.android.libraries.matrix.api.core.RoomId import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class AcceptDeclineInvitePresenter( diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt index c06638fe56..4d3b26da1d 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt @@ -10,11 +10,11 @@ package io.element.android.features.invite.impl.acceptdecline import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteView import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomId -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt index 246fe0ee03..92a1d0c472 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockPresenter.kt @@ -28,66 +28,66 @@ import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -//@Inject -//class DeclineAndBlockPresenter( -// @Assisted private val inviteData: InviteData, -// private val declineInvite: DeclineInvite, -// private val snackbarDispatcher: SnackbarDispatcher, -//) : Presenter { -// @AssistedFactory -// interface Factory { -// fun create(inviteData: InviteData): DeclineAndBlockPresenter -// } -// -// @Composable -// override fun present(): DeclineAndBlockState { -// var reportReason by rememberSaveable { mutableStateOf("") } -// var blockUser by rememberSaveable { mutableStateOf(true) } -// var reportRoom by rememberSaveable { mutableStateOf(false) } -// val declineAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } -// -// val coroutineScope = rememberCoroutineScope() -// -// fun handleEvents(event: DeclineAndBlockEvents) { -// when (event) { -// DeclineAndBlockEvents.ClearDeclineAction -> declineAction.value = AsyncAction.Uninitialized -// DeclineAndBlockEvents.Decline -> coroutineScope.decline(reportReason, blockUser, reportRoom, declineAction) -// DeclineAndBlockEvents.ToggleBlockUser -> blockUser = !blockUser -// DeclineAndBlockEvents.ToggleReportRoom -> reportRoom = !reportRoom -// is DeclineAndBlockEvents.UpdateReportReason -> reportReason = event.reason -// } -// } -// -// return DeclineAndBlockState( -// reportRoom = reportRoom, -// reportReason = reportReason, -// blockUser = blockUser, -// declineAction = declineAction.value, -// eventSink = ::handleEvents -// ) -// } -// -// private fun CoroutineScope.decline( -// reason: String, -// blockUser: Boolean, -// reportRoom: Boolean, -// action: MutableState> -// ) = launch { -// action.value = AsyncAction.Loading -// declineInvite( -// roomId = inviteData.roomId, -// blockUser = blockUser, -// reportRoom = reportRoom, -// reportReason = reason -// ).onSuccess { -// action.value = AsyncAction.Success(Unit) -// }.onFailure { error -> -// if (error is DeclineInvite.Exception.DeclineInviteFailed) { -// action.value = AsyncAction.Failure(error) -// } else { -// action.value = AsyncAction.Uninitialized -// snackbarDispatcher.post(SnackbarMessage(CommonStrings.error_unknown)) -// } -// } -// } -//} +@Inject + class DeclineAndBlockPresenter( + @Assisted private val inviteData: InviteData, + private val declineInvite: DeclineInvite, + private val snackbarDispatcher: SnackbarDispatcher, + ) : Presenter { + @AssistedFactory + interface Factory { + fun create(inviteData: InviteData): DeclineAndBlockPresenter + } + + @Composable + override fun present(): DeclineAndBlockState { + var reportReason by rememberSaveable { mutableStateOf("") } + var blockUser by rememberSaveable { mutableStateOf(true) } + var reportRoom by rememberSaveable { mutableStateOf(false) } + val declineAction: MutableState> = remember { mutableStateOf(AsyncAction.Uninitialized) } + + val coroutineScope = rememberCoroutineScope() + + fun handleEvents(event: DeclineAndBlockEvents) { + when (event) { + DeclineAndBlockEvents.ClearDeclineAction -> declineAction.value = AsyncAction.Uninitialized + DeclineAndBlockEvents.Decline -> coroutineScope.decline(reportReason, blockUser, reportRoom, declineAction) + DeclineAndBlockEvents.ToggleBlockUser -> blockUser = !blockUser + DeclineAndBlockEvents.ToggleReportRoom -> reportRoom = !reportRoom + is DeclineAndBlockEvents.UpdateReportReason -> reportReason = event.reason + } + } + + return DeclineAndBlockState( + reportRoom = reportRoom, + reportReason = reportReason, + blockUser = blockUser, + declineAction = declineAction.value, + eventSink = ::handleEvents + ) + } + + private fun CoroutineScope.decline( + reason: String, + blockUser: Boolean, + reportRoom: Boolean, + action: MutableState> + ) = launch { + action.value = AsyncAction.Loading + declineInvite( + roomId = inviteData.roomId, + blockUser = blockUser, + reportRoom = reportRoom, + reportReason = reason + ).onSuccess { + action.value = AsyncAction.Success(Unit) + }.onFailure { error -> + if (error is DeclineInvite.Exception.DeclineInviteFailed) { + action.value = AsyncAction.Failure(error) + } else { + action.value = AsyncAction.Uninitialized + snackbarDispatcher.post(SnackbarMessage(CommonStrings.error_unknown)) + } + } + } + } diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt index 5d2bc3dd72..217da56806 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt @@ -9,12 +9,12 @@ package io.element.android.features.invite.impl.declineandblock import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.invite.api.InviteData import io.element.android.features.invite.api.declineandblock.DeclineInviteAndBlockEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject 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/InviteModule.kt index d1af822966..3f62408b20 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/InviteModule.kt @@ -7,8 +7,8 @@ package io.element.android.features.invite.impl.di -import dev.zacsweers.metro.Binds import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides import io.element.android.features.invite.api.SeenInvitesStore diff --git a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeoplePresenter.kt b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeoplePresenter.kt index 718610f24b..e473f5708b 100644 --- a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeoplePresenter.kt +++ b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeoplePresenter.kt @@ -16,9 +16,9 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import io.element.android.features.invitepeople.api.InvitePeopleEvents import io.element.android.features.invitepeople.api.InvitePeoplePresenter diff --git a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt index 484a02d12c..0e3fd11c21 100644 --- a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt +++ b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt @@ -10,10 +10,10 @@ package io.element.android.features.invitepeople.impl import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.invitepeople.api.InvitePeopleRenderer import io.element.android.features.invitepeople.api.InvitePeopleState import io.element.android.libraries.di.SessionScope -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt index 20ff02cd91..4c3802d195 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt @@ -9,11 +9,11 @@ package io.element.android.features.joinroom.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.joinroom.api.JoinRoomEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/CancelKnockRoom.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/CancelKnockRoom.kt index 0a21b538cf..675fb98a0c 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/CancelKnockRoom.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/CancelKnockRoom.kt @@ -8,10 +8,10 @@ package io.element.android.features.joinroom.impl.di import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId -import dev.zacsweers.metro.Inject interface CancelKnockRoom { suspend operator fun invoke(roomId: RoomId): Result diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt index 0dad908daa..711439a44c 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/ForgetRoom.kt @@ -8,10 +8,10 @@ package io.element.android.features.joinroom.impl.di import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId -import dev.zacsweers.metro.Inject interface ForgetRoom { suspend operator fun invoke(roomId: RoomId): Result diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt index 738f0de1d2..4d32043b0f 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/KnockRoom.kt @@ -8,10 +8,10 @@ package io.element.android.features.joinroom.impl.di import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomIdOrAlias -import dev.zacsweers.metro.Inject interface KnockRoom { suspend operator fun invoke( diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/DefaultKnockRequestsBannerRenderer.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/DefaultKnockRequestsBannerRenderer.kt index 3654b43a59..612ddc5a6a 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/DefaultKnockRequestsBannerRenderer.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/DefaultKnockRequestsBannerRenderer.kt @@ -10,9 +10,9 @@ package io.element.android.features.knockrequests.impl.banner import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.knockrequests.api.banner.KnockRequestsBannerRenderer import io.element.android.libraries.di.RoomScope -import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) @Inject diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerPresenter.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerPresenter.kt index 40d1990a20..a1db930500 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerPresenter.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/banner/KnockRequestsBannerPresenter.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import dev.zacsweers.metro.Inject import io.element.android.features.knockrequests.impl.data.KnockRequestPresentable import io.element.android.features.knockrequests.impl.data.KnockRequestsService import io.element.android.libraries.architecture.Presenter @@ -23,7 +24,6 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject private const val ACCEPT_ERROR_DISPLAY_DURATION = 1500L 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/KnockRequestsModule.kt index 0fdf6045e8..8236222f07 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/KnockRequestsModule.kt @@ -10,8 +10,8 @@ package io.element.android.features.knockrequests.impl.data import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides -import io.element.android.libraries.di.RoomScope import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.RoomScope import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.room.JoinedRoom diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt index dc36750f7e..3559a30607 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt @@ -9,11 +9,11 @@ package io.element.android.features.knockrequests.impl.list import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.knockrequests.api.list.KnockRequestsListEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt index 7017fed054..ff943fcf6b 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/KnockRequestsListPresenter.kt @@ -16,13 +16,13 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.knockrequests.impl.data.KnockRequestsService import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runUpdatingState import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class KnockRequestsListPresenter( diff --git a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt index cc5104cb57..c20d2a9401 100644 --- a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt +++ b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt @@ -10,11 +10,11 @@ package io.element.android.features.leaveroom.impl import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.leaveroom.api.LeaveRoomRenderer import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomId -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt index 2fc75d8b2b..50242ab7ea 100644 --- a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt +++ b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/LeaveRoomPresenter.kt @@ -12,6 +12,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.features.leaveroom.api.LeaveRoomEvent import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.libraries.architecture.AsyncAction @@ -29,7 +30,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject @Inject class LeaveRoomPresenter( diff --git a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomModule.kt b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/di/LeaveRoomModule.kt index 4de7e4ef62..b13d7d3078 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/LeaveRoomModule.kt @@ -7,8 +7,8 @@ package io.element.android.features.leaveroom.impl.di -import dev.zacsweers.metro.Binds import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.leaveroom.impl.LeaveRoomPresenter diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt index 83f36a65fe..92795494b3 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt @@ -9,11 +9,11 @@ package io.element.android.features.licenses.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.licenses.api.OpenSourceLicensesEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DependenciesFlowNode.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DependenciesFlowNode.kt index 89df0eb399..cd81710671 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DependenciesFlowNode.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DependenciesFlowNode.kt @@ -15,6 +15,7 @@ import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode @@ -24,7 +25,6 @@ import io.element.android.features.licenses.impl.model.DependencyLicenseItem import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope import kotlinx.parcelize.Parcelize @ContributesNode(AppScope::class) diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/LicensesProvider.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/LicensesProvider.kt index 92b8d0afd1..c5c0fa84f5 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/LicensesProvider.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/LicensesProvider.kt @@ -8,16 +8,16 @@ package io.element.android.features.licenses.impl import android.content.Context +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.licenses.impl.model.DependencyLicenseItem import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.withContext import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream -import dev.zacsweers.metro.Inject interface LicensesProvider { suspend fun provides(): List diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsNode.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsNode.kt index f8a268cb74..cef9642fd2 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsNode.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/details/DependenciesDetailsNode.kt @@ -12,13 +12,13 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.licenses.impl.model.DependencyLicenseItem import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListNode.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListNode.kt index 9efe5141b1..7875af2b10 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListNode.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListNode.kt @@ -13,11 +13,11 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.licenses.impl.model.DependencyLicenseItem -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt index ee402f7d9b..7c36a4f1ef 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/list/DependencyLicensesListPresenter.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.licenses.impl.LicensesProvider import io.element.android.features.licenses.impl.model.DependencyLicenseItem import io.element.android.libraries.architecture.AsyncData @@ -20,7 +21,6 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.extensions.runCatchingExceptions import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toPersistentList -import dev.zacsweers.metro.Inject @Inject class DependencyLicensesListPresenter( diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt index 3e35712239..7f682c8c3a 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt @@ -7,11 +7,11 @@ package io.element.android.features.location.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.location.api.BuildConfig import io.element.android.features.location.api.LocationService -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActions.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActions.kt index 3b8b5b7f01..c879635052 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActions.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/actions/AndroidLocationActions.kt @@ -12,15 +12,15 @@ import android.content.Intent import android.net.Uri import androidx.annotation.VisibleForTesting import androidx.core.net.toUri +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.location.api.Location import io.element.android.libraries.androidutils.system.openAppSettingsPage import io.element.android.libraries.core.extensions.runCatchingExceptions -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber import java.util.Locale -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/permissions/DefaultPermissionsPresenter.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/permissions/DefaultPermissionsPresenter.kt index 6bd594ad3b..06d7885be1 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/permissions/DefaultPermissionsPresenter.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/common/permissions/DefaultPermissionsPresenter.kt @@ -11,11 +11,11 @@ import androidx.compose.runtime.Composable import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.rememberMultiplePermissionsState -import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope @Suppress("unused") @Inject diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt index 6a85229b01..b8ba3a1a73 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt @@ -9,12 +9,12 @@ package io.element.android.features.location.impl.send import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.location.api.SendLocationEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.timeline.Timeline -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt index 59aff8f6a3..1e7d529117 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt @@ -9,11 +9,11 @@ package io.element.android.features.location.impl.show import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.location.api.ShowLocationEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt index 41f3aedf32..c27483b792 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt @@ -11,12 +11,12 @@ import android.content.Context import android.content.Intent import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.lockscreen.api.LockScreenEntryPoint import io.element.android.features.lockscreen.impl.unlock.activity.PinUnlockActivity import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt index ea00091721..c1a97dadad 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenService.kt @@ -7,7 +7,10 @@ package io.element.android.features.lockscreen.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.lockscreen.api.LockScreenLockState import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticatorManager @@ -15,8 +18,6 @@ import io.element.android.features.lockscreen.impl.biometric.DefaultBiometricUnl import io.element.android.features.lockscreen.impl.pin.DefaultPinCodeManagerCallback import io.element.android.features.lockscreen.impl.pin.PinCodeManager import io.element.android.features.lockscreen.impl.storage.LockScreenStore -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver @@ -30,7 +31,6 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject import kotlin.time.Duration @SingleIn(AppScope::class) 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 3f1f55aa1f..923eb32c76 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 @@ -7,10 +7,10 @@ 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 dev.zacsweers.metro.AppScope import kotlin.time.Duration import io.element.android.appconfig.LockScreenConfig as AppConfigLockScreenConfig diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/biometric/DefaultBiometricAuthenticatorManager.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/biometric/DefaultBiometricAuthenticatorManager.kt index e48b2eef34..b6b3c4115f 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/biometric/DefaultBiometricAuthenticatorManager.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/biometric/DefaultBiometricAuthenticatorManager.kt @@ -22,21 +22,21 @@ import androidx.compose.ui.res.stringResource import androidx.core.content.getSystemService import androidx.fragment.app.FragmentActivity import androidx.lifecycle.compose.LocalLifecycleOwner +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.lockscreen.impl.LockScreenConfig import io.element.android.features.lockscreen.impl.R import io.element.android.features.lockscreen.impl.storage.LockScreenStore import io.element.android.libraries.cryptography.api.EncryptionDecryptionService import io.element.android.libraries.cryptography.api.SecretKeyRepository -import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.ui.strings.CommonStrings import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import java.util.concurrent.CopyOnWriteArrayList -import dev.zacsweers.metro.Inject private const val SECRET_KEY_ALIAS = "elementx.SECRET_KEY_ALIAS_BIOMETRIC" diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/DefaultPinCodeManager.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/DefaultPinCodeManager.kt index 571ffeff8d..824db5339e 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/DefaultPinCodeManager.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/pin/DefaultPinCodeManager.kt @@ -7,16 +7,16 @@ package io.element.android.features.lockscreen.impl.pin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.lockscreen.impl.storage.LockScreenStore import io.element.android.libraries.cryptography.api.EncryptionDecryptionService import io.element.android.libraries.cryptography.api.EncryptionResult import io.element.android.libraries.cryptography.api.SecretKeyRepository -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.Flow import java.util.concurrent.CopyOnWriteArrayList -import dev.zacsweers.metro.Inject private const val SECRET_KEY_ALIAS = "elementx.SECRET_KEY_ALIAS_PIN_CODE" diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsPresenter.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsPresenter.kt index 0618f5d834..6f238c964b 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsPresenter.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/settings/LockScreenSettingsPresenter.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.lockscreen.impl.LockScreenConfig import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticator import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticatorManager @@ -23,7 +24,6 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class LockScreenSettingsPresenter( diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricPresenter.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricPresenter.kt index 5bbe5c9400..f1183d8541 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricPresenter.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/biometric/SetupBiometricPresenter.kt @@ -13,12 +13,12 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticator import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticatorManager import io.element.android.features.lockscreen.impl.storage.LockScreenStore import io.element.android.libraries.architecture.Presenter import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class SetupBiometricPresenter( diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinPresenter.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinPresenter.kt index 1206b23d59..36065484c7 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinPresenter.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/SetupPinPresenter.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.lockscreen.impl.LockScreenConfig import io.element.android.features.lockscreen.impl.pin.PinCodeManager import io.element.android.features.lockscreen.impl.pin.model.PinEntry @@ -21,7 +22,6 @@ import io.element.android.features.lockscreen.impl.setup.pin.validation.SetupPin import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta import kotlinx.coroutines.delay -import dev.zacsweers.metro.Inject /** * Some time for the ui to refresh before showing confirmation step. diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/validation/PinValidator.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/validation/PinValidator.kt index 62f728d27d..a12872fab1 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/validation/PinValidator.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/setup/pin/validation/PinValidator.kt @@ -7,9 +7,9 @@ package io.element.android.features.lockscreen.impl.setup.pin.validation +import dev.zacsweers.metro.Inject import io.element.android.features.lockscreen.impl.LockScreenConfig import io.element.android.features.lockscreen.impl.pin.model.PinEntry -import dev.zacsweers.metro.Inject @Inject class PinValidator(private val lockScreenConfig: LockScreenConfig) { diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockHelper.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockHelper.kt index 9bee9cc625..59bccff9be 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockHelper.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockHelper.kt @@ -11,11 +11,11 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberUpdatedState +import dev.zacsweers.metro.Inject import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticatorManager import io.element.android.features.lockscreen.impl.biometric.DefaultBiometricUnlockCallback import io.element.android.features.lockscreen.impl.pin.DefaultPinCodeManagerCallback import io.element.android.features.lockscreen.impl.pin.PinCodeManager -import dev.zacsweers.metro.Inject @Inject class PinUnlockHelper( diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockPresenter.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockPresenter.kt index 965e712506..cf0f864f66 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockPresenter.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/PinUnlockPresenter.kt @@ -15,6 +15,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticator import io.element.android.features.lockscreen.impl.biometric.BiometricAuthenticatorManager import io.element.android.features.lockscreen.impl.pin.PinCodeManager @@ -29,7 +30,6 @@ import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class PinUnlockPresenter( diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt index 000ad930e5..a494bca8c6 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/activity/PinUnlockActivity.kt @@ -15,6 +15,7 @@ import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope +import dev.zacsweers.metro.Inject import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.lockscreen.api.LockScreenLockState import io.element.android.features.lockscreen.api.LockScreenService @@ -26,7 +27,6 @@ import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.theme.ElementThemeApp import io.element.android.libraries.preferences.api.store.AppPreferencesStore import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject class PinUnlockActivity : AppCompatActivity() { internal companion object { diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/di/PinUnlockBindings.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/di/PinUnlockBindings.kt index d40d5cf662..8ddb898caa 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/di/PinUnlockBindings.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/unlock/di/PinUnlockBindings.kt @@ -7,9 +7,9 @@ package io.element.android.features.lockscreen.impl.unlock.di +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesTo import io.element.android.features.lockscreen.impl.unlock.activity.PinUnlockActivity -import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) interface PinUnlockBindings { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt index 601b8f7bbf..222b6e2c10 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.login.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.login.api.LoginEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt index 3674a96b90..652cd1e12c 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt @@ -8,11 +8,11 @@ package io.element.android.features.login.impl import androidx.core.net.toUri +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.login.api.LoginIntentResolver import io.element.android.features.login.api.LoginParams -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt index a933b5e093..77ce86c874 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/LoginFlowNode.kt @@ -22,6 +22,7 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.push import com.bumble.appyx.navmodel.backstack.operation.singleTop +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode @@ -42,7 +43,6 @@ import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcActionFlow diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accesscontrol/DefaultAccountProviderAccessControl.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accesscontrol/DefaultAccountProviderAccessControl.kt index a914e7186a..fb739008a7 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accesscontrol/DefaultAccountProviderAccessControl.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accesscontrol/DefaultAccountProviderAccessControl.kt @@ -7,14 +7,14 @@ package io.element.android.features.login.impl.accesscontrol +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.login.api.accesscontrol.AccountProviderAccessControl import io.element.android.features.login.impl.changeserver.AccountProviderAccessException import io.element.android.libraries.core.uri.ensureProtocol -import dev.zacsweers.metro.AppScope import io.element.android.libraries.wellknown.api.WellknownRetriever -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt index 76799b5056..b14dd75b10 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/accountprovider/AccountProviderDataSource.kt @@ -7,14 +7,14 @@ package io.element.android.features.login.impl.accountprovider +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.appconfig.AuthenticationConfig import io.element.android.features.enterprise.api.EnterpriseService -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @Inject diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt index 11d0fdb1aa..4df9eb12d5 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/changeserver/ChangeServerPresenter.kt @@ -12,6 +12,7 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.features.login.impl.accesscontrol.DefaultAccountProviderAccessControl import io.element.android.features.login.impl.accountprovider.AccountProvider import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource @@ -22,7 +23,6 @@ import io.element.android.libraries.architecture.runCatchingUpdatingState import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class ChangeServerPresenter( 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/LoginModule.kt index 93e9abd0c7..40bb58a96e 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/LoginModule.kt @@ -7,13 +7,13 @@ package io.element.android.features.login.impl.di +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import io.element.android.features.login.impl.changeserver.ChangeServerPresenter import io.element.android.features.login.impl.changeserver.ChangeServerState import io.element.android.libraries.architecture.Presenter -import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) @BindingContainer diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt index 37fc260f55..e3d8ad0317 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt @@ -7,13 +7,11 @@ package io.element.android.features.login.impl.di +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.GraphExtension import io.element.android.libraries.architecture.NodeFactoriesBindings -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn -@SingleIn(QrCodeLoginScope::class) @GraphExtension(QrCodeLoginScope::class) interface QrCodeLoginComponent : NodeFactoriesBindings { @ContributesTo(AppScope::class) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt index 672cc8aba1..70a0d97781 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/login/LoginHelper.kt @@ -12,6 +12,7 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf +import dev.zacsweers.metro.Inject import io.element.android.features.login.impl.error.ChangeServerError import io.element.android.features.login.impl.screens.chooseaccountprovider.ChooseAccountProviderPresenter import io.element.android.features.login.impl.screens.confirmaccountprovider.ConfirmAccountProviderPresenter @@ -26,7 +27,6 @@ import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcActionFlow import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject /** * This class is responsible for managing the login flow, including handling OIDC actions and diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/DefaultQrCodeLoginManager.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/DefaultQrCodeLoginManager.kt index 6e54395c71..42bada93a0 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/DefaultQrCodeLoginManager.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/DefaultQrCodeLoginManager.kt @@ -8,8 +8,9 @@ package io.element.android.features.login.impl.qrcode import dev.zacsweers.metro.ContributesBinding -import io.element.android.features.login.impl.di.QrCodeLoginScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.features.login.impl.di.QrCodeLoginScope import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep @@ -17,7 +18,6 @@ import io.element.android.libraries.matrix.api.auth.qrlogin.QrLoginException import io.element.android.libraries.matrix.api.core.SessionId import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import dev.zacsweers.metro.Inject @SingleIn(QrCodeLoginScope::class) @ContributesBinding(QrCodeLoginScope::class) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/resolver/HomeserverResolver.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/resolver/HomeserverResolver.kt index d929858351..5612a56d5e 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/resolver/HomeserverResolver.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/resolver/HomeserverResolver.kt @@ -7,6 +7,7 @@ package io.element.android.features.login.impl.resolver +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.parallelMap @@ -21,7 +22,6 @@ import kotlinx.coroutines.flow.flow import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeout import java.util.Collections -import dev.zacsweers.metro.Inject /** * Resolve homeserver base on search terms. diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderNode.kt index e8135751db..7f0f2478d1 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderNode.kt @@ -14,11 +14,11 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt index 3dc45db866..3c725106c8 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/changeaccountprovider/ChangeAccountProviderPresenter.kt @@ -9,6 +9,7 @@ package io.element.android.features.login.impl.screens.changeaccountprovider import androidx.compose.runtime.Composable import androidx.compose.runtime.remember +import dev.zacsweers.metro.Inject import io.element.android.appconfig.AuthenticationConfig import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.enterprise.api.canConnectToAnyHomeserver @@ -16,7 +17,6 @@ import io.element.android.features.login.impl.accountprovider.AccountProvider import io.element.android.features.login.impl.changeserver.ChangeServerState import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.uri.ensureProtocol -import dev.zacsweers.metro.Inject @Inject class ChangeAccountProviderPresenter( diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderNode.kt index 207539409f..a9c3b3d6b0 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderNode.kt @@ -14,11 +14,11 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails @ContributesNode(AppScope::class) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenter.kt index e7aa729bc2..d259454f18 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/chooseaccountprovider/ChooseAccountProviderPresenter.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.appconfig.AuthenticationConfig import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.features.login.impl.accountprovider.AccountProvider @@ -20,7 +21,6 @@ import io.element.android.features.login.impl.login.LoginHelper import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.uri.ensureProtocol -import dev.zacsweers.metro.Inject @Inject class ChooseAccountProviderPresenter( diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderNode.kt index a15d818a43..79d2a0bf7c 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/confirmaccountprovider/ConfirmAccountProviderNode.kt @@ -14,13 +14,13 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails @ContributesNode(AppScope::class) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt index 43ad8a5f54..e669bffdda 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/CreateAccountNode.kt @@ -14,6 +14,7 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode @@ -21,7 +22,6 @@ import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.androidutils.browser.openUrlInChromeCustomTab import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/MessageParser.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/MessageParser.kt index 7a1928322a..8450aef1d3 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/MessageParser.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/createaccount/MessageParser.kt @@ -7,12 +7,12 @@ package io.element.android.features.login.impl.screens.createaccount -import dev.zacsweers.metro.ContributesBinding -import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource import io.element.android.libraries.matrix.api.auth.external.ExternalSession import kotlinx.serialization.json.Json -import dev.zacsweers.metro.Inject interface MessageParser { /** diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordNode.kt index f06196bd51..43d74d5aff 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordNode.kt @@ -12,10 +12,10 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt index 05f45a67cf..b492c2201b 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt @@ -15,6 +15,8 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable +import dev.zacsweers.metro.Inject +import io.element.android.features.login.impl.DefaultLoginUserStory import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter @@ -22,7 +24,6 @@ import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.core.SessionId import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class LoginPasswordPresenter( diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingNode.kt index f57122e66e..17bad8e4c5 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingNode.kt @@ -14,13 +14,13 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.auth.OidcDetails @ContributesNode(AppScope::class) diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroPresenter.kt index 85e6a41ee7..b90e2a6aeb 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/intro/QrCodeIntroPresenter.kt @@ -14,11 +14,11 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.permissions.api.PermissionsEvents import io.element.android.libraries.permissions.api.PermissionsPresenter -import dev.zacsweers.metro.Inject @Inject class QrCodeIntroPresenter( diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt index f6185851d3..ed612f2ac3 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/qrcode/scan/QrCodeScanPresenter.kt @@ -15,6 +15,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.login.impl.accesscontrol.DefaultAccountProviderAccessControl import io.element.android.features.login.impl.qrcode.QrCodeLoginManager import io.element.android.libraries.architecture.AsyncAction @@ -31,7 +32,6 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import timber.log.Timber import java.util.concurrent.atomic.AtomicBoolean -import dev.zacsweers.metro.Inject @Inject class QrCodeScanPresenter( diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderNode.kt index 999ad50099..3d92627d38 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderNode.kt @@ -14,11 +14,11 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.util.openLearnMorePage -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderPresenter.kt index 57eb0cef97..0aa06ca632 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/searchaccountprovider/SearchAccountProviderPresenter.kt @@ -15,6 +15,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.login.impl.changeserver.ChangeServerState import io.element.android.features.login.impl.resolver.HomeserverData import io.element.android.features.login.impl.resolver.HomeserverResolver @@ -23,7 +24,6 @@ import io.element.android.libraries.architecture.Presenter import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class SearchAccountProviderPresenter( diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/web/WebClientUrlForAuthenticationRetriever.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/web/WebClientUrlForAuthenticationRetriever.kt index df014e96ab..f72af823f2 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/web/WebClientUrlForAuthenticationRetriever.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/web/WebClientUrlForAuthenticationRetriever.kt @@ -8,13 +8,13 @@ package io.element.android.features.login.impl.web import androidx.core.net.toUri +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.appconfig.AuthenticationConfig import io.element.android.features.login.impl.screens.createaccount.AccountCreationNotSupported -import dev.zacsweers.metro.AppScope import io.element.android.libraries.wellknown.api.WellknownRetriever import timber.log.Timber -import dev.zacsweers.metro.Inject interface WebClientUrlForAuthenticationRetriever { suspend fun retrieve(homeServerUrl: String): String diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt index 2662d69847..3cd3fdbf08 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.logout.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.logout.api.LogoutEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutUseCase.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutUseCase.kt index e27fdd6071..06a79a8d2d 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutUseCase.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutUseCase.kt @@ -7,12 +7,12 @@ package io.element.android.features.logout.impl -import dev.zacsweers.metro.ContributesBinding -import io.element.android.features.logout.api.LogoutUseCase import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.features.logout.api.LogoutUseCase import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutPresenter.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutPresenter.kt index a31ff80bda..a98e300661 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutPresenter.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/LogoutPresenter.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter @@ -28,7 +29,6 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class LogoutPresenter( diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt index 8603040ff0..7bc33e961d 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt @@ -10,6 +10,7 @@ package io.element.android.features.logout.impl.direct import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.PreviewParameter import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.logout.api.direct.DirectLogoutEvents import io.element.android.features.logout.api.direct.DirectLogoutState import io.element.android.features.logout.api.direct.DirectLogoutStateProvider @@ -18,7 +19,6 @@ import io.element.android.features.logout.impl.ui.LogoutActionDialog import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.di.SessionScope -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DirectLogoutPresenter.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DirectLogoutPresenter.kt index fc7929c161..1e74aa2bc7 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DirectLogoutPresenter.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DirectLogoutPresenter.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.features.logout.api.direct.DirectLogoutEvents import io.element.android.features.logout.api.direct.DirectLogoutState import io.element.android.features.logout.impl.tools.isBackingUp @@ -25,7 +26,6 @@ import io.element.android.libraries.matrix.api.encryption.BackupUploadState import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class DirectLogoutPresenter( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt index afcf0b6b6e..b27bcab3b8 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/DefaultMessagesEntryPoint.kt @@ -11,8 +11,8 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import dev.zacsweers.metro.ContributesBinding -import io.element.android.features.messages.api.MessagesEntryPoint import dev.zacsweers.metro.Inject +import io.element.android.features.messages.api.MessagesEntryPoint import io.element.android.libraries.architecture.NodeFactoriesBindings import io.element.android.libraries.architecture.bindings import io.element.android.libraries.di.SessionScope diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt index ff7aecb50b..27fcdcd5d7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesNode.kt @@ -50,8 +50,8 @@ import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.designsystem.utils.OnLifecycleEvent -import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.analytics.toAnalyticsViewRoom import io.element.android.libraries.matrix.api.core.EventId diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenter.kt index bead09660b..6263576c53 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListPresenter.kt @@ -14,9 +14,9 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.UserEventPermissions import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt index 8f1db5b7ef..2b720882d2 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/DefaultMediaOptimizationSelectorPresenter.kt @@ -14,9 +14,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeVideo diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/VideoMetadataExtractor.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/VideoMetadataExtractor.kt index f4db599640..05287470ec 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/VideoMetadataExtractor.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/attachments/video/VideoMetadataExtractor.kt @@ -11,12 +11,12 @@ import android.content.Context import android.media.MediaMetadataRetriever import android.net.Uri import android.util.Size -import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.runCatchingExceptions -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStatePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStatePresenter.kt index 90d40b4647..85675d784e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStatePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/identity/IdentityChangeStatePresenter.kt @@ -11,6 +11,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.encryption.EncryptionService @@ -20,7 +21,6 @@ import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject @Inject class IdentityChangeStatePresenter( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/VerifiedUserSendFailureFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/VerifiedUserSendFailureFactory.kt index 2c2837213a..09f85805c8 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/VerifiedUserSendFailureFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/VerifiedUserSendFailureFactory.kt @@ -7,9 +7,9 @@ package io.element.android.features.messages.impl.crypto.sendfailure +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState -import dev.zacsweers.metro.Inject @Inject class VerifiedUserSendFailureFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt index 35607644da..54aa26e6ab 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/crypto/sendfailure/resolve/ResolveVerifiedUserSendFailurePresenter.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.crypto.sendfailure.VerifiedUserSendFailure import io.element.android.features.messages.impl.crypto.sendfailure.VerifiedUserSendFailureFactory import io.element.android.libraries.architecture.AsyncAction @@ -22,7 +23,6 @@ import io.element.android.libraries.architecture.runUpdatingState import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.timeline.item.event.LocalEventSendState import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class ResolveVerifiedUserSendFailurePresenter( 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/MessagesBindsModule.kt index 8dca347925..50f9606273 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/MessagesBindsModule.kt @@ -7,8 +7,8 @@ package io.element.android.features.messages.impl.di -import dev.zacsweers.metro.Binds import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import io.element.android.features.messages.impl.crypto.identity.IdentityChangeState import io.element.android.features.messages.impl.crypto.identity.IdentityChangeStatePresenter diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt index 77a7d1616b..a0cb3877cb 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/DefaultComposerDraftService.kt @@ -8,11 +8,11 @@ package io.element.android.features.messages.impl.draft import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.room.draft.ComposerDraft -import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) @Inject diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/MatrixComposerDraftStore.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/MatrixComposerDraftStore.kt index 13e953a58c..6ce82b6522 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/MatrixComposerDraftStore.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/MatrixComposerDraftStore.kt @@ -7,12 +7,12 @@ package io.element.android.features.messages.impl.draft +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.room.draft.ComposerDraft import timber.log.Timber -import dev.zacsweers.metro.Inject /** * A draft store that persists drafts in the room state. diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt index 575e38110f..c6342dac1f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt @@ -7,10 +7,10 @@ package io.element.android.features.messages.impl.draft +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.room.draft.ComposerDraft -import dev.zacsweers.metro.Inject /** * A volatile draft store that keeps drafts in memory only. diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt index 7496518a7b..b2e4125050 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt @@ -7,13 +7,13 @@ package io.element.android.features.messages.impl.link +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.core.extensions.containsRtLOverride -import dev.zacsweers.metro.AppScope import io.element.android.wysiwyg.link.Link import java.net.URI -import dev.zacsweers.metro.Inject interface LinkChecker { fun isSafe(link: Link): Boolean diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkPresenter.kt index c4e97938ab..9c4694bafa 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkPresenter.kt @@ -11,10 +11,10 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.wysiwyg.link.Link -import dev.zacsweers.metro.Inject @Inject class LinkPresenter( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt index 8c73875ac9..5158fc2e57 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt @@ -11,11 +11,11 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.messages.api.MessageComposerContext import io.element.android.libraries.di.RoomScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.textcomposer.model.MessageComposerMode -import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) @ContributesBinding(RoomScope::class) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt index 886a3108a3..1211155c4c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt @@ -8,11 +8,11 @@ package io.element.android.features.messages.impl.messagecomposer import androidx.compose.runtime.Composable -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.wysiwyg.compose.RichTextEditorState import io.element.android.wysiwyg.compose.rememberRichTextEditorState -import dev.zacsweers.metro.Inject interface RichTextEditorStateFactory { @Composable diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/RoomAliasSuggestionsDataSource.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/RoomAliasSuggestionsDataSource.kt index a018a5331e..5b3a1edf1e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/RoomAliasSuggestionsDataSource.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/RoomAliasSuggestionsDataSource.kt @@ -8,13 +8,13 @@ package io.element.android.features.messages.impl.messagecomposer.suggestions import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.roomlist.RoomListService import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import dev.zacsweers.metro.Inject data class RoomAliasSuggestion( val roomAlias: RoomAlias, diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt index c5a5a54e50..ef38656489 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt @@ -7,6 +7,7 @@ package io.element.android.features.messages.impl.messagecomposer.suggestions +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.data.filterUpTo import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember @@ -16,7 +17,6 @@ import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.textcomposer.mentions.ResolvedSuggestion import io.element.android.libraries.textcomposer.model.Suggestion import io.element.android.libraries.textcomposer.model.SuggestionType -import dev.zacsweers.metro.Inject /** * This class is responsible for processing suggestions when `@`, `/` or `#` are type in the composer. diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt index 641673c2da..811516e022 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/PinnedEventsTimelineProvider.kt @@ -7,11 +7,12 @@ package io.element.android.features.messages.impl.pinned +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.mapState import io.element.android.libraries.di.RoomScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.room.CreateTimelineParams import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.api.sync.SyncService @@ -26,7 +27,6 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) @Inject diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerItemFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerItemFactory.kt index 7137e91c89..c6e177d87a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerItemFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerItemFactory.kt @@ -8,11 +8,11 @@ package io.element.android.features.messages.impl.pinned.banner import androidx.compose.ui.text.AnnotatedString +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.eventformatter.api.PinnedMessagesBannerFormatter import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject @Inject class PinnedMessagesBannerItemFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt index 11fc1fa62e..5833da56dc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/pinned/banner/PinnedMessagesBannerPresenter.kt @@ -17,6 +17,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.pinned.PinnedEventsTimelineProvider import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter @@ -29,7 +30,6 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach -import dev.zacsweers.metro.Inject @Inject class PinnedMessagesBannerPresenter( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/ThreadedMessagesNode.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/ThreadedMessagesNode.kt index 35499362fa..4c8d42fb3f 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/ThreadedMessagesNode.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/threads/ThreadedMessagesNode.kt @@ -49,8 +49,8 @@ import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.designsystem.utils.OnLifecycleEvent -import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.analytics.toAnalyticsViewRoom import io.element.android.libraries.matrix.api.core.EventId diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/DefaultHtmlConverterProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/DefaultHtmlConverterProvider.kt index e4d317255d..54c4e55deb 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/DefaultHtmlConverterProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/DefaultHtmlConverterProvider.kt @@ -14,10 +14,11 @@ import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.messages.api.timeline.HtmlConverterProvider import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.di.RoomScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.textcomposer.ElementRichTextEditorStyle import io.element.android.libraries.textcomposer.mentions.MentionSpanProvider import io.element.android.wysiwyg.compose.StyledHtmlConverter @@ -25,7 +26,6 @@ import io.element.android.wysiwyg.display.MentionDisplayHandler import io.element.android.wysiwyg.display.TextDisplay import io.element.android.wysiwyg.utils.HtmlConverter import uniffi.wysiwyg_composer.newMentionDetector -import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) @SingleIn(RoomScope::class) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/MarkAsFullyRead.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/MarkAsFullyRead.kt index 5e4684208e..6fe1cd687c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/MarkAsFullyRead.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/MarkAsFullyRead.kt @@ -8,13 +8,13 @@ package io.element.android.features.messages.impl.timeline import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.timeline.ReceiptType import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject interface MarkAsFullyRead { operator fun invoke(roomId: RoomId) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt index bc46f6e9df..a0f4c2ce0e 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineController.kt @@ -8,9 +8,11 @@ package io.element.android.features.messages.impl.timeline import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.binding import io.element.android.features.messages.impl.timeline.di.LiveTimeline import io.element.android.libraries.di.RoomScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.CreateTimelineParams import io.element.android.libraries.matrix.api.room.JoinedRoom @@ -34,8 +36,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import java.io.Closeable import java.util.Optional -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.binding /** * This controller is responsible of using the right timeline to display messages and make associated actions. diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt index fd30d200ac..baad0470dc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt @@ -7,13 +7,13 @@ package io.element.android.features.messages.impl.timeline +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.matrix.api.core.EventId import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber -import dev.zacsweers.metro.Inject @Inject class TimelineItemIndexer() { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenter.kt index dd24df232c..b7d674d1de 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/customreaction/CustomReactionPresenter.kt @@ -12,11 +12,11 @@ import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.architecture.Presenter import kotlinx.collections.immutable.toImmutableSet import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class CustomReactionPresenter( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenter.kt index 071f56ddca..4354ef5b25 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/reactionsummary/ReactionSummaryPresenter.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.RoomMember @@ -21,7 +22,6 @@ import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList -import dev.zacsweers.metro.Inject @Inject class ReactionSummaryPresenter( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt index 4ad8f29076..2cc44452ec 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt @@ -12,9 +12,9 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.architecture.Presenter -import dev.zacsweers.metro.Inject @Inject class ReadReceiptBottomSheetPresenter() : Presenter { 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 f4b98cce8e..994c184114 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 @@ -13,10 +13,10 @@ 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 dev.zacsweers.metro.SingleIn import kotlin.reflect.KClass /** diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt index 51b29ea86e..499c5349ae 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFactory.kt @@ -7,6 +7,7 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemCallNotifyContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemLegacyCallInviteContent @@ -26,7 +27,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.StickerConten import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt index b8679e278b..f82843af7b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt @@ -7,10 +7,10 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentFailedToParseMessageFactory() { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt index 802e81898c..9c68c5e364 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt @@ -7,10 +7,10 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemUnknownContent import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentFailedToParseStateFactory() { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt index f2eec9e15f..53dae43dfd 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentMessageFactory.kt @@ -11,6 +11,7 @@ import android.text.style.URLSpan import androidx.core.text.buildSpannedString import androidx.core.text.getSpans import androidx.core.text.toSpannable +import dev.zacsweers.metro.Inject import io.element.android.features.location.api.Location import io.element.android.features.messages.api.timeline.HtmlConverterProvider import io.element.android.features.messages.impl.timeline.model.event.TimelineItemAudioContent @@ -48,7 +49,6 @@ import io.element.android.libraries.matrix.ui.messages.toHtmlDocument import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList -import dev.zacsweers.metro.Inject import kotlin.time.Duration @Inject diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt index 5419ee049e..bb2f7fe138 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentPollFactory.kt @@ -7,12 +7,12 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemPollContent import io.element.android.features.poll.api.pollcontent.PollContentStateFactory import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.PollContent -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentPollFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentProfileChangeFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentProfileChangeFactory.kt index 61472e7195..b01a19bf41 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentProfileChangeFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentProfileChangeFactory.kt @@ -7,12 +7,12 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemProfileChangeContent import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.eventformatter.api.TimelineEventFormatter import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentProfileChangeFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt index 757c2d8146..179bbd41c3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt @@ -7,10 +7,10 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRedactedContent import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentRedactedFactory() { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRoomMembershipFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRoomMembershipFactory.kt index fb912bbddb..3fbd7357e6 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRoomMembershipFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRoomMembershipFactory.kt @@ -7,12 +7,12 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemRoomMembershipContent import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.eventformatter.api.TimelineEventFormatter import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentRoomMembershipFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStateFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStateFactory.kt index d598555e6b..38d41f9341 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStateFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStateFactory.kt @@ -7,12 +7,12 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStateEventContent import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.eventformatter.api.TimelineEventFormatter import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentStateFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt index 43ee4dfcf2..0652f41365 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentStickerFactory.kt @@ -7,13 +7,13 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemStickerContent import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.matrix.api.timeline.item.event.StickerContent import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentStickerFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt index 61c4f20256..462add472b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt @@ -7,10 +7,10 @@ package io.element.android.features.messages.impl.timeline.factories.event +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEncryptedContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemEventContent import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent -import dev.zacsweers.metro.Inject @Inject class TimelineItemContentUTDFactory() { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemDaySeparatorFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemDaySeparatorFactory.kt index 42e8226242..a93a8888ea 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemDaySeparatorFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemDaySeparatorFactory.kt @@ -7,12 +7,12 @@ package io.element.android.features.messages.impl.timeline.factories.virtual +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemDaySeparatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemVirtualModel import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.api.DateFormatterMode import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem -import dev.zacsweers.metro.Inject @Inject class TimelineItemDaySeparatorFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt index ae575ab3de..bcb81ff9e4 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/virtual/TimelineItemVirtualFactory.kt @@ -7,6 +7,7 @@ package io.element.android.features.messages.impl.timeline.factories.virtual +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLastForwardIndicatorModel import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemLoadingIndicatorModel @@ -16,7 +17,6 @@ import io.element.android.features.messages.impl.timeline.model.virtual.Timeline import io.element.android.features.messages.impl.timeline.model.virtual.TimelineItemVirtualModel import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem -import dev.zacsweers.metro.Inject @Inject class TimelineItemVirtualFactory( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt index 0dd61a5b03..cc3b4e2f8b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt @@ -8,12 +8,12 @@ package io.element.android.features.messages.impl.timeline.groups import androidx.annotation.VisibleForTesting +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.di.RoomScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.UniqueId import kotlinx.collections.immutable.toImmutableList -import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) @Inject diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/protection/TimelineProtectionPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/protection/TimelineProtectionPresenter.kt index 333a8c894b..0d9db51d98 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/protection/TimelineProtectionPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/protection/TimelineProtectionPresenter.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.core.coroutine.mapState import io.element.android.libraries.matrix.api.core.EventId @@ -20,7 +21,6 @@ import io.element.android.libraries.matrix.api.media.MediaPreviewService import io.element.android.libraries.matrix.api.media.isPreviewEnabled import io.element.android.libraries.matrix.api.room.BaseRoom import kotlinx.collections.immutable.toImmutableSet -import dev.zacsweers.metro.Inject @Inject class TimelineProtectionPresenter( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenter.kt index 86c4488272..bedbf8104c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/typing/TypingNotificationPresenter.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.JoinedRoom @@ -29,7 +30,6 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import dev.zacsweers.metro.Inject @Inject class TypingNotificationPresenter( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/TextPillificationHelper.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/TextPillificationHelper.kt index ec05846a01..bb95e1a26c 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/TextPillificationHelper.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/TextPillificationHelper.kt @@ -14,6 +14,7 @@ import android.text.style.URLSpan import android.util.Patterns import androidx.core.text.getSpans import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.MatrixPatternType import io.element.android.libraries.matrix.api.core.MatrixPatterns @@ -26,7 +27,6 @@ import io.element.android.libraries.textcomposer.mentions.MentionSpanProvider import io.element.android.libraries.textcomposer.mentions.getMentionSpans import io.element.android.wysiwyg.view.spans.CodeBlockSpan import io.element.android.wysiwyg.view.spans.InlineCodeSpan -import dev.zacsweers.metro.Inject interface TextPillificationHelper { fun pillify(text: CharSequence, pillifyPermalinks: Boolean = true): CharSequence diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt index 6bc0e94172..aacdfeb0e8 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/utils/messagesummary/DefaultMessageSummaryFormatter.kt @@ -9,6 +9,7 @@ package io.element.android.features.messages.impl.utils.messagesummary import android.content.Context import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.features.messages.impl.timeline.model.event.TimelineItemAudioContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemCallNotifyContent @@ -27,10 +28,9 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVideoContent import io.element.android.features.messages.impl.timeline.model.event.TimelineItemVoiceContent import io.element.android.libraries.core.extensions.toSafeLength -import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.ui.strings.CommonStrings -import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) @Inject diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt index bb15b807e3..c8c33c52b2 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/DefaultVoiceMessageComposerPresenter.kt @@ -19,9 +19,9 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.core.net.toUri import androidx.lifecycle.Lifecycle -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Composer import io.element.android.features.messages.api.MessageComposerContext diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPlayer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPlayer.kt index 9775109a6d..a8ca37dac7 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPlayer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/composer/VoiceMessageComposerPlayer.kt @@ -7,6 +7,7 @@ package io.element.android.features.messages.impl.voicemessages.composer +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.mediaplayer.api.MediaPlayer @@ -21,7 +22,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.scan import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject /** * A media player for the voice message composer. diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManager.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManager.kt index 9da2255532..be1db85d6b 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManager.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/voicemessages/timeline/RedactedVoiceMessageManager.kt @@ -8,13 +8,13 @@ package io.element.android.features.messages.impl.voicemessages.timeline import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent import io.element.android.libraries.mediaplayer.api.MediaPlayer import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject interface RedactedVoiceMessageManager { suspend fun onEachMatrixTimelineItem(timelineItems: List) 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 e3fc689414..5d9f4edfb5 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 @@ -8,13 +8,13 @@ package io.element.android.features.messages.impl.voicemessages.timeline import androidx.compose.runtime.Composable -import dev.zacsweers.metro.Binds import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Inject import dev.zacsweers.metro.IntoMap -import dev.zacsweers.metro.BindingContainer -import dev.zacsweers.metro.ContributesTo 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 diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt index a1dd4509f6..68c4c7ce3a 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/DefaultMigrationEntryPoint.kt @@ -9,11 +9,11 @@ package io.element.android.features.migration.impl import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.api.MigrationEntryPoint import io.element.android.features.api.MigrationState -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt index b7f1bdc9be..7edbc5389f 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/MigrationPresenter.kt @@ -14,14 +14,14 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.api.MigrationState import io.element.android.features.migration.impl.migrations.AppMigration import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import timber.log.Timber -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @Inject diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt index de2536f80d..048a400f6c 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration01.kt @@ -7,10 +7,10 @@ package io.element.android.features.migration.impl.migrations +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.logs.LogFilesRemover -import dev.zacsweers.metro.AppScope /** * Remove existing logs from the device to remove any leaks of sensitive data. diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt index a392d92c79..44f4806c65 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration02.kt @@ -7,9 +7,9 @@ package io.element.android.features.migration.impl.migrations +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.preferences.api.store.SessionPreferencesStoreFactory import io.element.android.libraries.sessionstorage.api.SessionStore diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt index d4040bb52f..0cb3573954 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration03.kt @@ -7,9 +7,9 @@ package io.element.android.features.migration.impl.migrations +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope /** * This performs the same operation as [AppMigration01], since we need to clear the local logs again. diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration04.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration04.kt index 121cfd963e..8ab4921038 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration04.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration04.kt @@ -8,10 +8,10 @@ package io.element.android.features.migration.impl.migrations import android.content.Context +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.runCatchingExceptions -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext /** diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration05.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration05.kt index 21a1759137..109ff7e0b7 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration05.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration05.kt @@ -7,10 +7,9 @@ package io.element.android.features.migration.impl.migrations +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Named -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.BaseDirectory import io.element.android.libraries.sessionstorage.api.SessionStore import java.io.File @@ -19,7 +18,7 @@ import java.io.File @Inject class AppMigration05( private val sessionStore: SessionStore, - @Named("baseDirectory") private val baseDirectory: File, + @BaseDirectory private val baseDirectory: File, ) : AppMigration { override val order: Int = 5 diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration06.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration06.kt index b78271b995..2eb98b9e5f 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration06.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration06.kt @@ -7,10 +7,9 @@ package io.element.android.features.migration.impl.migrations +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Named -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.sessionstorage.api.SessionStore import java.io.File @@ -22,7 +21,7 @@ import java.io.File @Inject class AppMigration06( private val sessionStore: SessionStore, - @Named("cacheDirectory") private val cacheDirectory: File, + @CacheDirectory private val cacheDirectory: File, ) : AppMigration { override val order: Int = 6 diff --git a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration07.kt b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration07.kt index 1187bb4ef7..fe88817796 100644 --- a/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration07.kt +++ b/features/migration/impl/src/main/kotlin/io/element/android/features/migration/impl/migrations/AppMigration07.kt @@ -7,10 +7,10 @@ package io.element.android.features.migration.impl.migrations +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.logs.LogFilesRemover -import dev.zacsweers.metro.AppScope /** * Delete the previous log files. diff --git a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt index f94625c61e..76525ff657 100644 --- a/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt +++ b/features/networkmonitor/impl/src/main/kotlin/io/element/android/features/networkmonitor/impl/DefaultNetworkMonitor.kt @@ -13,13 +13,14 @@ import android.content.Context import android.net.ConnectivityManager import android.net.Network import android.net.NetworkRequest +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.networkmonitor.api.NetworkMonitor import io.element.android.features.networkmonitor.api.NetworkStatus -import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope +import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.channels.awaitClose @@ -33,7 +34,6 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.stateIn import timber.log.Timber import java.util.concurrent.atomic.AtomicInteger -import dev.zacsweers.metro.Inject @ContributesBinding(scope = AppScope::class) @SingleIn(AppScope::class) diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt index 26206d27c4..e028209ae8 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultEndPollAction.kt @@ -8,13 +8,13 @@ package io.element.android.features.poll.impl.actions import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.PollEnd import io.element.android.features.poll.api.actions.EndPollAction import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.services.analytics.api.AnalyticsService -import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) @Inject diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt index 120fb45f4b..a067757357 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/actions/DefaultSendPollResponseAction.kt @@ -8,13 +8,13 @@ package io.element.android.features.poll.impl.actions import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.PollVote import io.element.android.features.poll.api.actions.SendPollResponseAction import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.timeline.Timeline import io.element.android.services.analytics.api.AnalyticsService -import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) @Inject diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt index 67979af892..e27eb974b4 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.poll.impl.create import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.poll.api.create.CreatePollEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt index 00d1e77eff..4e55822b80 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt @@ -9,11 +9,11 @@ package io.element.android.features.poll.impl.history import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.poll.api.history.PollHistoryEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt index a48fbfa3b2..15bc803f51 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/PollHistoryPresenter.kt @@ -17,6 +17,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.poll.api.actions.EndPollAction import io.element.android.features.poll.api.actions.SendPollResponseAction import io.element.android.features.poll.impl.history.model.PollHistoryFilter @@ -29,7 +30,6 @@ import io.element.android.libraries.matrix.api.timeline.Timeline import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class PollHistoryPresenter( diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt index 264e8abf72..3db799bce9 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/model/PollHistoryItemsFactory.kt @@ -7,6 +7,7 @@ package io.element.android.features.poll.impl.history.model +import dev.zacsweers.metro.Inject import io.element.android.features.poll.api.pollcontent.PollContentStateFactory import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.dateformatter.api.DateFormatter @@ -15,7 +16,6 @@ import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.PollContent import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject @Inject class PollHistoryItemsFactory( diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/model/DefaultPollContentStateFactory.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/model/DefaultPollContentStateFactory.kt index 0deed34bb3..d506b72cf5 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/model/DefaultPollContentStateFactory.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/model/DefaultPollContentStateFactory.kt @@ -8,6 +8,7 @@ package io.element.android.features.poll.impl.model import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.poll.api.pollcontent.PollAnswerItem import io.element.android.features.poll.api.pollcontent.PollContentState import io.element.android.features.poll.api.pollcontent.PollContentStateFactory @@ -17,7 +18,6 @@ import io.element.android.libraries.matrix.api.poll.isDisclosed import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem import io.element.android.libraries.matrix.api.timeline.item.event.PollContent import kotlinx.collections.immutable.toImmutableList -import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) @Inject diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt index 20335b1672..285d8bdd88 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt @@ -7,14 +7,14 @@ package io.element.android.features.preferences.impl -import dev.zacsweers.metro.ContributesBinding -import io.element.android.features.preferences.api.CacheService import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.features.preferences.api.CacheService import io.element.android.libraries.matrix.api.core.SessionId import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt index 9417bd6a97..628d7961fc 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.preferences.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.preferences.api.PreferencesEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt index c26d1910d0..fb58382b33 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt @@ -8,8 +8,8 @@ package io.element.android.features.preferences.impl.about import androidx.compose.runtime.Composable -import io.element.android.libraries.architecture.Presenter import dev.zacsweers.metro.Inject +import io.element.android.libraries.architecture.Presenter @Inject class AboutPresenter() : Presenter { diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt index a763a64765..6378b3038d 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/AdvancedSettingsPresenter.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.runtime.remember +import dev.zacsweers.metro.Inject import io.element.android.compound.theme.Theme import io.element.android.compound.theme.mapToTheme import io.element.android.libraries.architecture.Presenter @@ -25,7 +26,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class AdvancedSettingsPresenter( diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/MediaPreviewConfigStateStore.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/MediaPreviewConfigStateStore.kt index 53f0d19f7a..b2d7243ccc 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/MediaPreviewConfigStateStore.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/advanced/MediaPreviewConfigStateStore.kt @@ -10,12 +10,13 @@ package io.element.android.features.preferences.impl.advanced import androidx.compose.runtime.Composable import androidx.compose.runtime.mutableStateOf import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.runUpdatingState import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage import io.element.android.libraries.di.SessionScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.media.MediaPreviewService import io.element.android.libraries.matrix.api.media.MediaPreviewValue @@ -27,7 +28,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject data class MediaPreviewConfigState( val hideInviteAvatars: Boolean, diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsPresenter.kt index a6a1e9a136..4f833b783d 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/analytics/AnalyticsSettingsPresenter.kt @@ -8,9 +8,9 @@ package io.element.android.features.preferences.impl.analytics import androidx.compose.runtime.Composable +import dev.zacsweers.metro.Inject import io.element.android.features.analytics.api.preferences.AnalyticsPreferencesState import io.element.android.libraries.architecture.Presenter -import dev.zacsweers.metro.Inject @Inject class AnalyticsSettingsPresenter( diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt index b972ae4319..8a61bd4bed 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/blockedusers/BlockedUsersPresenter.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runUpdatingState @@ -27,7 +28,6 @@ import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.toPersistentList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class BlockedUsersPresenter( diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt index 4250871100..e07c30bac9 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/developer/DeveloperSettingsPresenter.kt @@ -19,6 +19,7 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.snapshots.SnapshotStateMap +import dev.zacsweers.metro.Inject import io.element.android.features.preferences.impl.developer.tracing.toLogLevel import io.element.android.features.preferences.impl.developer.tracing.toLogLevelItem import io.element.android.features.preferences.impl.tasks.ClearCacheUseCase @@ -46,7 +47,6 @@ import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import java.net.URL -import dev.zacsweers.metro.Inject @Inject class DeveloperSettingsPresenter( diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt index 1dfe0990e1..1fcb984924 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/NotificationSettingsPresenter.kt @@ -18,6 +18,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter @@ -39,7 +40,6 @@ import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds @Inject diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/SystemNotificationsEnabledProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/SystemNotificationsEnabledProvider.kt index f4a3c5572c..8dc8b3d2bd 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/SystemNotificationsEnabledProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/notifications/SystemNotificationsEnabledProvider.kt @@ -8,10 +8,10 @@ package io.element.android.features.preferences.impl.notifications import androidx.core.app.NotificationManagerCompat -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn interface SystemNotificationsEnabledProvider { fun notificationsEnabled(): Boolean diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt index eef8f92760..aad8086df6 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/PreferencesRootPresenter.kt @@ -17,6 +17,7 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.logout.api.direct.DirectLogoutState import io.element.android.features.preferences.impl.utils.ShowDeveloperSettingsProvider import io.element.android.features.rageshake.api.RageshakeFeatureAvailability @@ -32,7 +33,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class PreferencesRootPresenter( diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt index f8d412f530..ce65f62f37 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/root/VersionFormatter.kt @@ -7,12 +7,12 @@ package io.element.android.features.preferences.impl.root -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.meta.BuildMeta import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject interface VersionFormatter { fun get(): String diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ClearCacheUseCase.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ClearCacheUseCase.kt index 8a412a16c3..11c4a3c94f 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ClearCacheUseCase.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ClearCacheUseCase.kt @@ -10,19 +10,19 @@ package io.element.android.features.preferences.impl.tasks import android.content.Context import coil3.SingletonImageLoader import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Provider import io.element.android.features.ftue.api.state.FtueService import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.preferences.impl.DefaultCacheService import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.SessionScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.push.api.PushService import io.element.android.services.appnavstate.api.ActiveRoomsHolder import kotlinx.coroutines.withContext import okhttp3.OkHttpClient -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Provider interface ClearCacheUseCase { suspend operator fun invoke() diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ComputeCacheSizeUseCase.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ComputeCacheSizeUseCase.kt index d6fe9d6df4..10b1748590 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ComputeCacheSizeUseCase.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ComputeCacheSizeUseCase.kt @@ -9,14 +9,14 @@ package io.element.android.features.preferences.impl.tasks import android.content.Context import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.file.getSizeOfFiles import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.di.SessionScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClient import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject interface ComputeCacheSizeUseCase { suspend operator fun invoke(): String diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/utils/ShowDeveloperSettingsProvider.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/utils/ShowDeveloperSettingsProvider.kt index 3f1d27be11..d87b205d5e 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/utils/ShowDeveloperSettingsProvider.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/utils/ShowDeveloperSettingsProvider.kt @@ -7,13 +7,13 @@ package io.element.android.features.preferences.impl.utils +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType import io.element.android.libraries.ui.utils.MultipleTapToUnlock import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import dev.zacsweers.metro.Inject @Inject class ShowDeveloperSettingsProvider( diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/DefaultRageshakeFeatureAvailability.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/DefaultRageshakeFeatureAvailability.kt index 381c5de3cc..8cb210159b 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/DefaultRageshakeFeatureAvailability.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/DefaultRageshakeFeatureAvailability.kt @@ -7,13 +7,13 @@ package io.element.android.features.rageshake.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.RageshakeFeatureAvailability import io.element.android.features.rageshake.impl.reporter.BugReporterUrlProvider -import dev.zacsweers.metro.AppScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt index 3842b0938b..dde326c04d 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportNode.kt @@ -14,13 +14,13 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.rageshake.api.bugreport.BugReportEntryPoint import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.libraries.androidutils.system.toast -import dev.zacsweers.metro.AppScope import io.element.android.libraries.ui.strings.CommonStrings @ContributesNode(AppScope::class) diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt index ccdae64978..4faef73589 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/BugReportPresenter.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable +import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.reporter.BugReporter import io.element.android.features.rageshake.api.reporter.BugReporterListener import io.element.android.features.rageshake.impl.crash.CrashDataStore @@ -25,7 +26,6 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.annotations.AppCoroutineScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class BugReportPresenter( diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt index 8b3ccae8b9..309da0b9e1 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.rageshake.impl.bugreport import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.bugreport.BugReportEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/DefaultCrashDetectionPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/DefaultCrashDetectionPresenter.kt index 6c7db426b4..4d9f596d1d 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/DefaultCrashDetectionPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/crash/DefaultCrashDetectionPresenter.kt @@ -14,19 +14,19 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.RageshakeFeatureAvailability import io.element.android.features.rageshake.api.crash.CrashDetectionEvents import io.element.android.features.rageshake.api.crash.CrashDetectionPresenter import io.element.android.features.rageshake.api.crash.CrashDetectionState import io.element.android.libraries.core.meta.BuildMeta -import dev.zacsweers.metro.AppScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/detection/DefaultRageshakeDetectionPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/detection/DefaultRageshakeDetectionPresenter.kt index e4c10bbca1..c0120bfc3a 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/detection/DefaultRageshakeDetectionPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/detection/DefaultRageshakeDetectionPresenter.kt @@ -14,7 +14,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.detection.RageshakeDetectionEvents import io.element.android.features.rageshake.api.detection.RageshakeDetectionPresenter import io.element.android.features.rageshake.api.detection.RageshakeDetectionState @@ -23,11 +25,9 @@ import io.element.android.features.rageshake.api.preferences.RageshakePreference import io.element.android.features.rageshake.api.screenshot.ImageResult import io.element.android.features.rageshake.impl.rageshake.RageShake import io.element.android.features.rageshake.impl.screenshot.ScreenshotHolder -import dev.zacsweers.metro.AppScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeModule.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeModule.kt index f7ab844975..97f4d39ec3 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/RageshakeModule.kt @@ -7,6 +7,7 @@ package io.element.android.features.rageshake.impl.di +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo @@ -17,7 +18,6 @@ import io.element.android.features.rageshake.api.detection.RageshakeDetectionSta import io.element.android.features.rageshake.api.preferences.RageshakePreferencesPresenter import io.element.android.features.rageshake.api.preferences.RageshakePreferencesState import io.element.android.libraries.architecture.Presenter -import dev.zacsweers.metro.AppScope @ContributesTo(AppScope::class) @BindingContainer diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt index 208894af42..1122042d7f 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/logs/DefaultLogFilesRemover.kt @@ -7,12 +7,12 @@ package io.element.android.features.rageshake.impl.logs +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.logs.LogFilesRemover import io.element.android.features.rageshake.impl.reporter.DefaultBugReporter -import dev.zacsweers.metro.AppScope import java.io.File -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/preferences/DefaultRageshakePreferencesPresenter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/preferences/DefaultRageshakePreferencesPresenter.kt index ee6798318c..d1072f360c 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/preferences/DefaultRageshakePreferencesPresenter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/preferences/DefaultRageshakePreferencesPresenter.kt @@ -15,17 +15,17 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.rageshake.api.RageshakeFeatureAvailability import io.element.android.features.rageshake.api.preferences.RageshakePreferencesEvents import io.element.android.features.rageshake.api.preferences.RageshakePreferencesPresenter import io.element.android.features.rageshake.api.preferences.RageshakePreferencesState import io.element.android.features.rageshake.impl.rageshake.RageShake import io.element.android.features.rageshake.impl.rageshake.RageshakeDataStore -import dev.zacsweers.metro.AppScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/DefaultRageShake.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/DefaultRageShake.kt index 060538c97b..634e3ed65a 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/DefaultRageShake.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/rageshake/DefaultRageShake.kt @@ -11,13 +11,13 @@ import android.content.Context import android.hardware.Sensor import android.hardware.SensorManager import androidx.core.content.getSystemService -import dev.zacsweers.metro.ContributesBinding import com.squareup.seismic.ShakeDetector import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import dev.zacsweers.metro.binding +import io.element.android.libraries.di.annotations.ApplicationContext @SingleIn(AppScope::class) @ContributesBinding(scope = AppScope::class, binding = binding()) diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt index 9cb32c4055..97092f3774 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt @@ -7,10 +7,10 @@ package io.element.android.features.rageshake.impl.reporter -import dev.zacsweers.metro.ContributesBinding -import io.element.android.appconfig.RageshakeConfig import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.appconfig.RageshakeConfig fun interface BugReportAppNameProvider { fun provide(): String diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt index e2d92da583..01b6857c0b 100755 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt @@ -11,7 +11,11 @@ import android.content.Context import android.os.Build import androidx.core.net.toFile import androidx.core.net.toUri +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Provider +import dev.zacsweers.metro.SingleIn import io.element.android.appconfig.RageshakeConfig import io.element.android.features.rageshake.api.logs.createWriteToFilesConfiguration import io.element.android.features.rageshake.api.reporter.BugReporter @@ -24,9 +28,7 @@ import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.mimetype.MimeTypes -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.SdkMetadata import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService @@ -55,8 +57,6 @@ import java.time.LocalDateTime import java.time.ZoneOffset import java.time.format.DateTimeFormatter import java.util.Locale -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Provider /** * BugReporter creates and sends the bug reports. diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterUrlProvider.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterUrlProvider.kt index 0453673c7b..84f8e2ca0a 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterUrlProvider.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterUrlProvider.kt @@ -7,17 +7,17 @@ package io.element.android.features.rageshake.impl.reporter +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.appconfig.RageshakeConfig import io.element.android.features.enterprise.api.BugReportUrl import io.element.android.features.enterprise.api.EnterpriseService -import dev.zacsweers.metro.AppScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import okhttp3.HttpUrl import okhttp3.HttpUrl.Companion.toHttpUrl -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/screenshot/DefaultScreenshotHolder.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/screenshot/DefaultScreenshotHolder.kt index c87bd98f44..5166f3d672 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/screenshot/DefaultScreenshotHolder.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/screenshot/DefaultScreenshotHolder.kt @@ -10,14 +10,14 @@ package io.element.android.features.rageshake.impl.screenshot import android.content.Context import android.graphics.Bitmap import androidx.core.net.toUri +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.androidutils.bitmap.writeBitmap import io.element.android.libraries.androidutils.file.safeDelete -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.SingleIn import java.io.File -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt index e43a7505e8..6bd827d3a1 100644 --- a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt +++ b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt @@ -9,12 +9,12 @@ package io.element.android.features.reportroom.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.reportroom.api.ReportRoomEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.RoomId -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoom.kt b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoom.kt index 71a493bff7..dae5c4e272 100644 --- a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoom.kt +++ b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/ReportRoom.kt @@ -8,10 +8,10 @@ package io.element.android.features.reportroom.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId -import dev.zacsweers.metro.Inject interface ReportRoom { suspend operator fun invoke( diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt index ec342eb7ec..88ad28cd6f 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.roomaliasresolver.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.roomaliasesolver.api.RoomAliasResolverEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt b/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt index 96ee3594b5..2401606f34 100644 --- a/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt +++ b/features/roomcall/impl/src/main/kotlin/io/element/android/features/roomcall/impl/RoomCallStatePresenter.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.runtime.remember +import dev.zacsweers.metro.Inject import io.element.android.features.call.api.CurrentCall import io.element.android.features.call.api.CurrentCallService import io.element.android.features.enterprise.api.SessionEnterpriseService @@ -20,7 +21,6 @@ import io.element.android.features.roomcall.api.RoomCallState import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.matrix.ui.room.canCall -import dev.zacsweers.metro.Inject @Inject class RoomCallStatePresenter( 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/RoomCallModule.kt index b3c6b4dccd..3a8ac51ef6 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/RoomCallModule.kt @@ -7,8 +7,8 @@ package io.element.android.features.roomcall.impl.di -import dev.zacsweers.metro.Binds import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import io.element.android.features.roomcall.api.RoomCallState import io.element.android.features.roomcall.impl.RoomCallStatePresenter diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt index 8b35899a47..4c43b8bda1 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt @@ -10,13 +10,13 @@ package io.element.android.features.roomdetails.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint import io.element.android.features.roomdetails.api.RoomDetailsEntryPoint.InitialTarget import io.element.android.features.roomdetails.impl.RoomDetailsFlowNode.NavTarget import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index 8c3247d43a..0071aced5d 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -15,6 +15,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.Interaction import io.element.android.features.leaveroom.api.LeaveRoomEvent import io.element.android.features.leaveroom.api.LeaveRoomState @@ -55,7 +56,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class RoomDetailsPresenter( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt index 26f66aa37d..2520d0d29c 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt @@ -20,6 +20,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.core.net.toUri +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.file.TemporaryUriDeleter import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter @@ -42,7 +43,6 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject @Inject class RoomDetailsEditPresenter( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt index 33fc515d60..bbb231ccb9 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListDataSource.kt @@ -7,13 +7,13 @@ package io.element.android.features.roomdetails.impl.members +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.roomMembers import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject @Inject class RoomMemberListDataSource( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt index b6e7d48fed..c5bd507d69 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.roommembermoderation.api.ModerationAction import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents import io.element.android.features.roommembermoderation.api.RoomMemberModerationState @@ -45,7 +46,6 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject @Inject class RoomMemberListPresenter( diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsPresenter.kt index a1606a8f17..2ad4c84028 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/rolesandpermissions/RolesAndPermissionsPresenter.kt @@ -15,6 +15,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.RoomModeration import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter @@ -30,7 +31,6 @@ import io.element.android.libraries.matrix.ui.model.roleOf import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class RolesAndPermissionsPresenter( diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt index a0e216bde5..f5e2cb8c9d 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt @@ -10,12 +10,12 @@ package io.element.android.features.roomdirectory.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.roomdirectory.api.RoomDirectoryEntryPoint import io.element.android.features.roomdirectory.impl.root.RoomDirectoryNode import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt index e080df1104..4696dd4263 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/root/RoomDirectoryPresenter.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.roomdirectory.impl.root.model.RoomDirectoryListState import io.element.android.features.roomdirectory.impl.root.model.toFeatureModel import io.element.android.libraries.architecture.Presenter @@ -26,7 +27,6 @@ import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.delay import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import dev.zacsweers.metro.Inject private const val SEARCH_BATCH_SIZE = 20 diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt index 8655c6d50c..cc9e0b4e5f 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt @@ -11,13 +11,13 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.SideEffect import androidx.compose.ui.Modifier import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.roommembermoderation.api.ModerationAction import io.element.android.features.roommembermoderation.api.RoomMemberModerationRenderer import io.element.android.features.roommembermoderation.api.RoomMemberModerationState import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.user.MatrixUser import timber.log.Timber -import dev.zacsweers.metro.Inject @ContributesBinding(RoomScope::class) @Inject 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/RoomMemberModerationModule.kt index a70d2ca1d2..9e4592d475 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/RoomMemberModerationModule.kt @@ -7,8 +7,8 @@ package io.element.android.features.roommembermoderation.impl.di -import dev.zacsweers.metro.Binds import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import io.element.android.features.roommembermoderation.api.RoomMemberModerationState import io.element.android.features.roommembermoderation.impl.RoomMemberModerationPresenter diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt index b43fd2a904..9f3f2c03f3 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.securebackup.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.securebackup.api.SecureBackupEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisablePresenter.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisablePresenter.kt index 43895c8152..aa1de8fde9 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisablePresenter.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/disable/SecureBackupDisablePresenter.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.features.securebackup.impl.loggerTagDisable import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter @@ -23,7 +24,6 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject @Inject class SecureBackupDisablePresenter( diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyPresenter.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyPresenter.kt index 08dd3ff8ed..b56a4542b0 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyPresenter.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/enter/SecureBackupEnterRecoveryKeyPresenter.kt @@ -15,6 +15,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.securebackup.impl.setup.views.RecoveryKeyUserStory import io.element.android.features.securebackup.impl.setup.views.RecoveryKeyViewState import io.element.android.features.securebackup.impl.tools.RecoveryKeyTools @@ -24,7 +25,6 @@ import io.element.android.libraries.architecture.runCatchingUpdatingState import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class SecureBackupEnterRecoveryKeyPresenter( diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowManager.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowManager.kt index e782c88c98..fe6a86a357 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowManager.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/reset/ResetIdentityFlowManager.kt @@ -7,6 +7,7 @@ package io.element.android.features.securebackup.impl.reset +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.MatrixClient @@ -20,7 +21,6 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class ResetIdentityFlowManager( diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootPresenter.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootPresenter.kt index 313cccc7a4..67ec1c9960 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootPresenter.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/root/SecureBackupRootPresenter.kt @@ -16,6 +16,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.features.securebackup.impl.loggerTagDisable import io.element.android.features.securebackup.impl.loggerTagRoot import io.element.android.libraries.architecture.AsyncAction @@ -30,7 +31,6 @@ import io.element.android.libraries.matrix.api.encryption.EncryptionService import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject @Inject class SecureBackupRootPresenter( diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt index c630aced7d..68a5ffd366 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt @@ -11,8 +11,8 @@ package io.element.android.features.securebackup.impl.setup import com.freeletics.flowredux.dsl.FlowReduxStateMachine -import kotlinx.coroutines.ExperimentalCoroutinesApi import dev.zacsweers.metro.Inject +import kotlinx.coroutines.ExperimentalCoroutinesApi import com.freeletics.flowredux.dsl.State as MachineState @Inject diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt index e899beef02..8d5770e126 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt @@ -11,10 +11,10 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.share.api.ShareEntryPoint import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.SessionScope -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt index 2249e157ac..b3db111820 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/ShareIntentHandler.kt @@ -15,7 +15,9 @@ import android.content.pm.ResolveInfo import android.net.Uri import android.os.Build import androidx.core.content.IntentCompat +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.compat.queryIntentActivitiesCompat import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeAny @@ -25,10 +27,8 @@ import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeFile import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeImage import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeText import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeVideo -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber -import dev.zacsweers.metro.Inject interface ShareIntentHandler { data class UriToShare( diff --git a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt index 6d003e3667..c85a957be6 100644 --- a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt +++ b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.signedout.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.signedout.api.SignedOutEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt index 4e90502325..9b6c9925a8 100644 --- a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt +++ b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/SignedOutNode.kt @@ -12,12 +12,12 @@ import androidx.compose.ui.Modifier import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.SessionId @ContributesNode(AppScope::class) diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt index 16dccd1ff6..063293fe90 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.startchat.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.startchat.api.StartChatEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartDMAction.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartDMAction.kt index 90839aaf61..6847b1859d 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartDMAction.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartDMAction.kt @@ -9,6 +9,7 @@ package io.element.android.features.startchat.impl import androidx.compose.runtime.MutableState import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.CreatedRoom import io.element.android.features.startchat.api.ConfirmingStartDmWithMatrixUser import io.element.android.features.startchat.api.StartDMAction @@ -20,7 +21,6 @@ import io.element.android.libraries.matrix.api.room.StartDMResult import io.element.android.libraries.matrix.api.room.startDM import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.services.analytics.api.AnalyticsService -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatPresenter.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatPresenter.kt index 22cacaa42c..10a9745f32 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatPresenter.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/root/StartChatPresenter.kt @@ -14,6 +14,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.features.startchat.api.StartDMAction import io.element.android.features.startchat.impl.userlist.SelectionMode import io.element.android.features.startchat.impl.userlist.UserListDataStore @@ -27,7 +28,6 @@ import io.element.android.libraries.featureflag.api.FeatureFlags import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.usersearch.api.UserRepository import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class StartChatPresenter( diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/DefaultUserListPresenter.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/DefaultUserListPresenter.kt index 1b0caad505..17f5076caf 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/DefaultUserListPresenter.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/DefaultUserListPresenter.kt @@ -15,9 +15,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import io.element.android.libraries.designsystem.theme.components.SearchBarResultState import io.element.android.libraries.di.SessionScope diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt index cba87d1a9d..f6db03a577 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt @@ -7,10 +7,10 @@ package io.element.android.features.startchat.impl.userlist +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import dev.zacsweers.metro.Inject @Inject class UserListDataStore() { diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt index 39f15ff33f..39fb84ec3e 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.userprofile.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.userprofile.api.UserProfileEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfilePresenterFactory.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfilePresenterFactory.kt index 4ff4b0c786..775cdf5ff9 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfilePresenterFactory.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfilePresenterFactory.kt @@ -8,13 +8,13 @@ package io.element.android.features.userprofile.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.userprofile.api.UserProfilePresenterFactory import io.element.android.features.userprofile.api.UserProfileState import io.element.android.features.userprofile.impl.root.UserProfilePresenter import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.UserId -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt index 1f508fa28b..e48c65b828 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.verifysession.impl.incoming import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.verifysession.api.IncomingVerificationEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateMachine.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateMachine.kt index ab20d0e8fb..40fbf4379c 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateMachine.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/IncomingVerificationStateMachine.kt @@ -10,12 +10,12 @@ package io.element.android.features.verifysession.impl.incoming import com.freeletics.flowredux.dsl.FlowReduxStateMachine +import dev.zacsweers.metro.Inject import io.element.android.features.verifysession.impl.util.andLogStateChange import io.element.android.features.verifysession.impl.util.logReceivedEvents import io.element.android.libraries.matrix.api.verification.SessionVerificationData import io.element.android.libraries.matrix.api.verification.SessionVerificationService import kotlinx.coroutines.ExperimentalCoroutinesApi -import dev.zacsweers.metro.Inject import com.freeletics.flowredux.dsl.State as MachineState @Inject diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt index f503d3f40a..8bb709a621 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.features.verifysession.impl.outgoing import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.verifysession.api.OutgoingVerificationEntryPoint import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt index 78616d1bcc..60688a9cb7 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt @@ -9,38 +9,16 @@ package io.element.android.features.verifysession.impl.outgoing -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import com.freeletics.flowredux.compose.rememberStateAndDispatch -import dev.zacsweers.metro.Assisted -import dev.zacsweers.metro.AssistedFactory -import dev.zacsweers.metro.Inject -import io.element.android.libraries.architecture.AsyncData -import io.element.android.libraries.architecture.Presenter -import io.element.android.libraries.matrix.api.encryption.EncryptionService -import io.element.android.libraries.matrix.api.verification.SessionVerificationService -import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus -import io.element.android.libraries.matrix.api.verification.VerificationFlowState -import io.element.android.libraries.matrix.api.verification.VerificationRequest -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.launchIn -import kotlinx.coroutines.flow.onEach -import timber.log.Timber -import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationStateMachine.Event as StateMachineEvent -import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationStateMachine.State as StateMachineState -//@Inject -//class OutgoingVerificationPresenter( +// @Inject +// class OutgoingVerificationPresenter( // @Assisted private val showDeviceVerifiedScreen: Boolean, // @Assisted private val verificationRequest: VerificationRequest.Outgoing, // private val sessionVerificationService: SessionVerificationService, // private val encryptionService: EncryptionService, -//) : Presenter { +// ) : Presenter { // @AssistedFactory // interface Factory { // fun create( @@ -177,4 +155,4 @@ import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificat // } // .launchIn(this) // } -//} +// } diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt index 208af2bb14..1c6349de0e 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt @@ -9,13 +9,13 @@ package io.element.android.features.viewfolder.impl import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.viewfolder.api.TextFileViewer import io.element.android.features.viewfolder.impl.file.ColorationMode import io.element.android.features.viewfolder.impl.file.FileContent -import dev.zacsweers.metro.AppScope import kotlinx.collections.immutable.ImmutableList -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt index b0ebc51f7d..f18e804efb 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt @@ -10,12 +10,12 @@ package io.element.android.features.viewfolder.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.viewfolder.api.ViewFolderEntryPoint import io.element.android.features.viewfolder.impl.root.ViewFolderRootNode import io.element.android.libraries.architecture.createNode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileContentReader.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileContentReader.kt index bbbb228aa7..e3635e40f4 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileContentReader.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileContentReader.kt @@ -7,13 +7,13 @@ package io.element.android.features.viewfolder.impl.file +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions -import dev.zacsweers.metro.AppScope import kotlinx.coroutines.withContext import java.io.File -import dev.zacsweers.metro.Inject interface FileContentReader { suspend fun getLines(path: String): Result> diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileSave.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileSave.kt index 3ce5134f94..9323281471 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileSave.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileSave.kt @@ -13,18 +13,18 @@ import android.os.Build import android.os.Environment import android.provider.MediaStore import androidx.annotation.RequiresApi +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.system.toast import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.mimetype.MimeTypes -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File import java.io.FileOutputStream -import dev.zacsweers.metro.Inject interface FileSave { suspend fun save( diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileShare.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileShare.kt index e6025dc1b5..3c8aae4f39 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileShare.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/FileShare.kt @@ -11,17 +11,17 @@ import android.content.Context import android.content.Intent import android.net.Uri import androidx.core.content.FileProvider +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.mimetype.MimeTypes -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File -import dev.zacsweers.metro.Inject interface FileShare { suspend fun share( diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileNode.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileNode.kt index 58ccdc2bd5..26bc2bad39 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileNode.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/file/ViewFileNode.kt @@ -13,12 +13,12 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/FolderExplorer.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/FolderExplorer.kt index ec60c0e611..dec0541622 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/FolderExplorer.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/FolderExplorer.kt @@ -7,14 +7,14 @@ package io.element.android.features.viewfolder.impl.folder +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.viewfolder.impl.model.Item import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import dev.zacsweers.metro.AppScope import kotlinx.coroutines.withContext import java.io.File -import dev.zacsweers.metro.Inject interface FolderExplorer { suspend fun getItems(path: String): List diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt index 5876213687..735f14a21c 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderNode.kt @@ -13,13 +13,13 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import com.bumble.appyx.core.plugin.plugins +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.viewfolder.impl.model.Item import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope @ContributesNode(AppScope::class) @Inject diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt index 473c812e32..6a7b4a8fa1 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/folder/ViewFolderPresenter.kt @@ -20,29 +20,29 @@ import io.element.android.features.viewfolder.impl.model.Item import io.element.android.libraries.architecture.Presenter import kotlinx.collections.immutable.toImmutableList -//@Inject -//class ViewFolderPresenter( -// @Assisted val canGoUp: Boolean, -// @Assisted val path: String, -// private val folderExplorer: FolderExplorer, -//) : Presenter { -// @AssistedFactory -// interface Factory { -// fun create(canGoUp: Boolean, path: String): ViewFolderPresenter -// } -// -// @Composable -// override fun present(): ViewFolderState { -// var content by remember { mutableStateOf(emptyList()) } -// LaunchedEffect(Unit) { -// content = buildList { -// if (canGoUp) add(Item.Parent) -// addAll(folderExplorer.getItems(path)) -// } -// } -// return ViewFolderState( -// path = path, -// content = content.toImmutableList(), -// ) -// } -//} +@Inject + class ViewFolderPresenter( + @Assisted val canGoUp: Boolean, + @Assisted val path: String, + private val folderExplorer: FolderExplorer, + ) : Presenter { + @AssistedFactory + interface Factory { + fun create(canGoUp: Boolean, path: String): ViewFolderPresenter + } + + @Composable + override fun present(): ViewFolderState { + var content by remember { mutableStateOf(emptyList()) } + LaunchedEffect(Unit) { + content = buildList { + if (canGoUp) add(Item.Parent) + addAll(folderExplorer.getItems(path)) + } + } + return ViewFolderState( + path = path, + content = content.toImmutableList(), + ) + } + } diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/root/ViewFolderRootNode.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/root/ViewFolderRootNode.kt index 7563c10e41..4fef22b046 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/root/ViewFolderRootNode.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/root/ViewFolderRootNode.kt @@ -17,6 +17,7 @@ import com.bumble.appyx.core.plugin.plugins import com.bumble.appyx.navmodel.backstack.BackStack import com.bumble.appyx.navmodel.backstack.operation.pop import com.bumble.appyx.navmodel.backstack.operation.push +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode @@ -29,7 +30,6 @@ import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import dev.zacsweers.metro.AppScope import kotlinx.parcelize.Parcelize @ContributesNode(AppScope::class) diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/clipboard/AndroidClipboardHelper.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/clipboard/AndroidClipboardHelper.kt index 7cf81f5cc1..98fa682060 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/clipboard/AndroidClipboardHelper.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/clipboard/AndroidClipboardHelper.kt @@ -11,10 +11,10 @@ import android.content.ClipData import android.content.ClipboardManager import android.content.Context import androidx.core.content.getSystemService +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext @ContributesBinding(AppScope::class) diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/TemporaryUriDeleter.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/TemporaryUriDeleter.kt index e85bcff21d..e8f7ef7f1d 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/TemporaryUriDeleter.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/file/TemporaryUriDeleter.kt @@ -9,9 +9,9 @@ package io.element.android.libraries.androidutils.file import android.content.Context import android.net.Uri +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/filesize/AndroidFileSizeFormatter.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/filesize/AndroidFileSizeFormatter.kt index cff1a5bd78..9578c96b2c 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/filesize/AndroidFileSizeFormatter.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/filesize/AndroidFileSizeFormatter.kt @@ -10,9 +10,9 @@ package io.element.android.libraries.androidutils.filesize import android.content.Context import android.os.Build import android.text.format.Formatter +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider diff --git a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/system/DateTimeObserver.kt b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/system/DateTimeObserver.kt index da81990688..e3c7973341 100644 --- a/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/system/DateTimeObserver.kt +++ b/libraries/androidutils/src/main/kotlin/io/element/android/libraries/androidutils/system/DateTimeObserver.kt @@ -11,11 +11,11 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import io.element.android.libraries.androidutils.system.DateTimeObserver.Event -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt index f55c628381..45ea9338a5 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/NodeFactories.kt @@ -11,10 +11,7 @@ import android.content.Context import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dev.zacsweers.metro.BindingContainer -import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Multibinds -import io.element.android.libraries.di.AppScope import kotlin.reflect.KClass inline fun Node.createNode( @@ -49,7 +46,7 @@ inline fun NodeFactoriesBindings.createNode( return node as N } -//@BindingContainer +// @BindingContainer interface NodeFactoriesBindings { @Multibinds fun nodeFactories(): Map, AssistedNodeFactory<*>> diff --git a/libraries/audio/impl/src/main/kotlin/io/element/android/libraries/audio/impl/DefaultAudioFocus.kt b/libraries/audio/impl/src/main/kotlin/io/element/android/libraries/audio/impl/DefaultAudioFocus.kt index 41183fa58f..f5edc2aabb 100644 --- a/libraries/audio/impl/src/main/kotlin/io/element/android/libraries/audio/impl/DefaultAudioFocus.kt +++ b/libraries/audio/impl/src/main/kotlin/io/element/android/libraries/audio/impl/DefaultAudioFocus.kt @@ -13,11 +13,11 @@ import android.media.AudioFocusRequest import android.media.AudioManager import android.os.Build import androidx.core.content.getSystemService +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import io.element.android.libraries.audio.api.AudioFocus import io.element.android.libraries.audio.api.AudioFocusRequester -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext @ContributesBinding(AppScope::class) diff --git a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt index dda43f4b08..f3da7a8de8 100644 --- a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt +++ b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt @@ -7,15 +7,15 @@ package io.element.android.libraries.cryptography.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.cryptography.api.AESEncryptionSpecs import io.element.android.libraries.cryptography.api.EncryptionDecryptionService import io.element.android.libraries.cryptography.api.EncryptionResult -import dev.zacsweers.metro.AppScope import javax.crypto.Cipher import javax.crypto.SecretKey import javax.crypto.spec.GCMParameterSpec -import dev.zacsweers.metro.Inject /** * Default implementation of [EncryptionDecryptionService] using AES encryption. 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/CryptographyModule.kt index ac79d64b25..6990796ef3 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/CryptographyModule.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.cryptography.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides -import dev.zacsweers.metro.AppScope import java.security.KeyStore internal const val ANDROID_KEYSTORE = "AndroidKeyStore" 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 c254f19f88..9e394f9db2 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 @@ -10,16 +10,16 @@ package io.element.android.libraries.cryptography.impl import android.annotation.SuppressLint import android.security.keystore.KeyGenParameterSpec import android.security.keystore.KeyProperties +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.cryptography.api.AESEncryptionSpecs import io.element.android.libraries.cryptography.api.SecretKeyRepository -import dev.zacsweers.metro.AppScope import timber.log.Timber import java.security.KeyStore import java.security.KeyStoreException import javax.crypto.KeyGenerator import javax.crypto.SecretKey -import dev.zacsweers.metro.Inject /** * Default implementation of [SecretKeyRepository] that uses the Android Keystore to store the keys. diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterDay.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterDay.kt index 336a549dd9..8a9ce96463 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterDay.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterDay.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.dateformatter.impl -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.extensions.safeCapitalize import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.extensions.safeCapitalize interface DateFormatterDay { fun format( diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterFull.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterFull.kt index 0222c94f66..38ff91fdc7 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterFull.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterFull.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.dateformatter.impl -import io.element.android.services.toolbox.api.strings.StringProvider import dev.zacsweers.metro.Inject +import io.element.android.services.toolbox.api.strings.StringProvider @Inject class DateFormatterFull( diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterMonth.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterMonth.kt index 362a0e96f5..a6002744c4 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterMonth.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatterMonth.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.dateformatter.impl +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.safeCapitalize import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject @Inject class DateFormatterMonth( diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatters.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatters.kt index 06418c03aa..ceac6777ba 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatters.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DateFormatters.kt @@ -9,6 +9,7 @@ package io.element.android.libraries.dateformatter.impl import android.text.format.DateUtils import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import kotlinx.datetime.LocalDateTime import kotlinx.datetime.toInstant @@ -17,7 +18,6 @@ import kotlinx.datetime.toJavaLocalDateTime import timber.log.Timber import java.time.Period import java.util.Locale -import dev.zacsweers.metro.Inject import kotlin.math.absoluteValue import kotlin.time.Clock diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DefaultDateFormatter.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DefaultDateFormatter.kt index ed542b3609..cd1180caa1 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DefaultDateFormatter.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/DefaultDateFormatter.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.dateformatter.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.api.DateFormatterMode -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocalDateTimeProvider.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocalDateTimeProvider.kt index 4573929f57..a246ce2293 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocalDateTimeProvider.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocalDateTimeProvider.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.dateformatter.impl +import dev.zacsweers.metro.Inject import kotlinx.datetime.LocalDateTime import kotlinx.datetime.toLocalDateTime -import dev.zacsweers.metro.Inject import kotlin.time.Clock import kotlin.time.Instant diff --git a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocaleChangeObserver.kt b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocaleChangeObserver.kt index 1e8feb21ce..773871d153 100644 --- a/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocaleChangeObserver.kt +++ b/libraries/dateformatter/impl/src/main/kotlin/io/element/android/libraries/dateformatter/impl/LocaleChangeObserver.kt @@ -12,11 +12,11 @@ import android.content.Context import android.content.Intent import android.content.IntentFilter import android.os.Build -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.annotations.ApplicationContext fun interface LocaleChangeObserver { fun addListener(listener: LocaleChangeListener) 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/DateFormatterModule.kt index ce0818eea9..ac36cd3caf 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/DateFormatterModule.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.dateformatter.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.dateformatter.impl.TimezoneProvider -import dev.zacsweers.metro.AppScope import kotlinx.datetime.TimeZone import java.util.Locale import kotlin.time.Clock diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/BaseDirectory.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/BaseDirectory.kt index b584e55cf2..bc07597456 100644 --- a/libraries/di/src/main/kotlin/io/element/android/libraries/di/BaseDirectory.kt +++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/BaseDirectory.kt @@ -12,7 +12,7 @@ import dev.zacsweers.metro.Qualifier /** * Qualifies a [File] object which represents the application base directory. */ -//@Retention(AnnotationRetention.RUNTIME) +@Retention(AnnotationRetention.RUNTIME) @MustBeDocumented @Qualifier @Target( diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatter.kt index 6e4398c78a..c172377ff5 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultPinnedMessagesBannerFormatter.kt @@ -10,6 +10,7 @@ package io.element.android.libraries.eventformatter.impl import androidx.annotation.StringRes import androidx.compose.ui.text.AnnotatedString import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.eventformatter.api.PinnedMessagesBannerFormatter import io.element.android.libraries.matrix.api.permalink.PermalinkParser @@ -35,7 +36,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.getDisambigua import io.element.android.libraries.matrix.ui.messages.toPlainText import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt index 4804258445..8354052a24 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.eventformatter.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter import io.element.android.libraries.eventformatter.impl.mode.RenderingMode @@ -42,7 +43,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.getDisambigua import io.element.android.libraries.matrix.ui.messages.toPlainText import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt index b5e03853fc..ba12d03d9c 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultTimelineEventFormatter.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.eventformatter.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.di.SessionScope import io.element.android.libraries.eventformatter.api.TimelineEventFormatter @@ -29,7 +30,6 @@ import io.element.android.libraries.matrix.api.timeline.item.event.UnknownConten import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt index cf9b0367cf..4bf73325af 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/ProfileChangeContentFormatter.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.eventformatter.impl +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject @Inject class ProfileChangeContentFormatter( diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt index 34d7360a68..7fb68ac167 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/RoomMembershipContentFormatter.kt @@ -7,12 +7,12 @@ package io.element.android.libraries.eventformatter.impl +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent import io.element.android.services.toolbox.api.strings.StringProvider import timber.log.Timber -import dev.zacsweers.metro.Inject @Inject class RoomMembershipContentFormatter( diff --git a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt index 92a307e0ec..6c6302f38b 100644 --- a/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt +++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/StateContentFormatter.kt @@ -7,13 +7,13 @@ package io.element.android.libraries.eventformatter.impl +import dev.zacsweers.metro.Inject import io.element.android.libraries.eventformatter.impl.mode.RenderingMode import io.element.android.libraries.matrix.api.timeline.item.event.OtherState import io.element.android.libraries.matrix.api.timeline.item.event.StateContent import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider import timber.log.Timber -import dev.zacsweers.metro.Inject @Inject class StateContentFormatter( diff --git a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagService.kt b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagService.kt index 3a05518afc..5bcbe93085 100644 --- a/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagService.kt +++ b/libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/DefaultFeatureFlagService.kt @@ -7,15 +7,15 @@ package io.element.android.libraries.featureflag.impl -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.meta.BuildMeta import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.featureflag.api.Feature import io.element.android.libraries.featureflag.api.FeatureFlagService import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) 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/FeatureFlagModule.kt index 74c0882197..b7def966f1 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/FeatureFlagModule.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.featureflag.impl.di import dagger.multibindings.ElementsIntoSet +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides -import dev.zacsweers.metro.AppScope import io.element.android.libraries.featureflag.impl.FeatureFlagProvider import io.element.android.libraries.featureflag.impl.PreferencesFeatureFlagProvider 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/FullScreenIntentModule.kt index 8a95885059..f1c6f1efe4 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/FullScreenIntentModule.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.fullscreenintent.impl.di +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import io.element.android.libraries.architecture.Presenter -import dev.zacsweers.metro.AppScope import io.element.android.libraries.fullscreenintent.api.FullScreenIntentPermissionsState import io.element.android.libraries.fullscreenintent.impl.FullScreenIntentPermissionsPresenter diff --git a/libraries/indicator/impl/src/main/kotlin/io/element/android/libraries/indicator/impl/DefaultIndicatorService.kt b/libraries/indicator/impl/src/main/kotlin/io/element/android/libraries/indicator/impl/DefaultIndicatorService.kt index e7357d0ca0..5cd17418b3 100644 --- a/libraries/indicator/impl/src/main/kotlin/io/element/android/libraries/indicator/impl/DefaultIndicatorService.kt +++ b/libraries/indicator/impl/src/main/kotlin/io/element/android/libraries/indicator/impl/DefaultIndicatorService.kt @@ -14,13 +14,13 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.indicator.api.IndicatorService import io.element.android.libraries.matrix.api.encryption.BackupState import io.element.android.libraries.matrix.api.encryption.EncryptionService import io.element.android.libraries.matrix.api.encryption.RecoveryState import io.element.android.libraries.matrix.api.verification.SessionVerificationService -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/CurrentSessionIdHolder.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/CurrentSessionIdHolder.kt index 76d29285db..b5a42fb9c3 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/CurrentSessionIdHolder.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/CurrentSessionIdHolder.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.matrix.api.user -import io.element.android.libraries.di.SessionScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId -import dev.zacsweers.metro.Inject @SingleIn(SessionScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt index 61630927ea..98c6c5da84 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.matrix.impl -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import org.matrix.rustcomponents.sdk.ClientBuilder +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import org.matrix.rustcomponents.sdk.ClientBuilder interface ClientBuilderProvider { fun provide(): ClientBuilder diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt index 44140cf9fd..572bcbfd18 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactory.kt @@ -7,7 +7,9 @@ package io.element.android.libraries.matrix.impl +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers +import io.element.android.libraries.di.BaseDirectory import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.featureflag.api.FeatureFlagService @@ -38,14 +40,11 @@ import uniffi.matrix_sdk_crypto.CollectStrategy import uniffi.matrix_sdk_crypto.DecryptionSettings import uniffi.matrix_sdk_crypto.TrustRequirement import java.io.File -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Named -import io.element.android.libraries.di.BaseDirectory @Inject class RustMatrixClientFactory( - @Named("baseDirectory") private val baseDirectory: File, - @Named("cacheDirectory") private val cacheDirectory: File, + @BaseDirectory private val baseDirectory: File, + @CacheDirectory private val cacheDirectory: File, @AppCoroutineScope private val appCoroutineScope: CoroutineScope, private val coroutineDispatchers: CoroutineDispatchers, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt index 2ef4e0279a..b3bbe9d4a7 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.matrix.impl -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.SdkMetadata import org.matrix.rustcomponents.sdk.sdkGitSha -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/OidcConfigurationProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/OidcConfigurationProvider.kt index 44dd90690b..a614c97680 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/OidcConfigurationProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/OidcConfigurationProvider.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.matrix.impl.auth +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.matrix.api.auth.OidcConfig import io.element.android.libraries.matrix.api.auth.OidcRedirectUrlProvider import org.matrix.rustcomponents.sdk.OidcConfiguration -import dev.zacsweers.metro.Inject @Inject class OidcConfigurationProvider( diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt index c100cd00c3..be2263eb86 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/RustMatrixAuthenticationService.kt @@ -7,12 +7,13 @@ package io.element.android.libraries.matrix.impl.auth +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.core.extensions.runCatchingExceptions -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.auth.MatrixHomeServerDetails @@ -49,7 +50,6 @@ import org.matrix.rustcomponents.sdk.QrLoginProgress import org.matrix.rustcomponents.sdk.QrLoginProgressListener import timber.log.Timber import uniffi.matrix_sdk.OAuthAuthorizationData -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt index fcf39b1b21..e204a9ff3e 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt @@ -7,13 +7,13 @@ package io.element.android.libraries.matrix.impl.auth.qrlogin -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.extensions.runCatchingExceptions import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginDataFactory import org.matrix.rustcomponents.sdk.QrCodeData -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt index 9a4fdc83d0..60e132df71 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt @@ -7,12 +7,12 @@ package io.element.android.libraries.matrix.impl.certificates -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import timber.log.Timber import java.security.KeyStore import java.security.KeyStoreException -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt index 5434ba4ec0..f25b054011 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.matrix.impl.keys import android.util.Base64 -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import java.security.SecureRandom +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import java.security.SecureRandom private const val SECRET_SIZE = 256 diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt index 9826e3ddd2..d583872503 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/paths/SessionPathsFactory.kt @@ -7,17 +7,16 @@ package io.element.android.libraries.matrix.impl.paths +import dev.zacsweers.metro.Inject +import io.element.android.libraries.di.BaseDirectory import io.element.android.libraries.di.CacheDirectory import java.io.File import java.util.UUID -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Named -import io.element.android.libraries.di.BaseDirectory @Inject class SessionPathsFactory( - @Named("baseDirectory") private val baseDirectory: File, - @Named("cacheDirectory") private val cacheDirectory: File, + @BaseDirectory private val baseDirectory: File, + @CacheDirectory private val cacheDirectory: File, ) { fun create(): SessionPaths { val subPath = UUID.randomUUID().toString() diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt index 9b2604e50b..c2eaab89ce 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt @@ -9,12 +9,12 @@ package io.element.android.libraries.matrix.impl.permalink import android.net.Uri import androidx.core.net.toUri +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.appconfig.MatrixConfiguration import io.element.android.libraries.core.extensions.replacePrefix -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.permalink.MatrixToConverter -import dev.zacsweers.metro.Inject /** * Mapping of an input URI to a matrix.to compliant URI. diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt index c597b4ce8d..3016d437b0 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt @@ -7,9 +7,10 @@ package io.element.android.libraries.matrix.impl.permalink -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.extensions.runCatchingExceptions import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.matrix.api.core.MatrixPatterns import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.UserId @@ -17,7 +18,6 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkBuilder import io.element.android.libraries.matrix.api.permalink.PermalinkBuilderError import org.matrix.rustcomponents.sdk.matrixToRoomAliasPermalink import org.matrix.rustcomponents.sdk.matrixToUserPermalink -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt index 97ba1d959f..0454b719e3 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkParser.kt @@ -8,9 +8,10 @@ package io.element.android.libraries.matrix.impl.permalink import androidx.core.net.toUri -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.extensions.runCatchingExceptions import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.RoomId @@ -22,7 +23,6 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkParser import kotlinx.collections.immutable.toImmutableList import org.matrix.rustcomponents.sdk.MatrixId import org.matrix.rustcomponents.sdk.parseMatrixEntityFrom -import dev.zacsweers.metro.Inject /** * This class turns a uri to a [PermalinkData]. diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt index c9f9e4097c..ae462bba86 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt @@ -7,13 +7,13 @@ package io.element.android.libraries.matrix.impl.platform -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.platform.InitPlatformService import io.element.android.libraries.matrix.api.tracing.TracingConfiguration import io.element.android.libraries.matrix.impl.tracing.map import org.matrix.rustcomponents.sdk.initPlatform -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/proxy/DefaultProxyProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/proxy/DefaultProxyProvider.kt index 9128448b1f..e5318671f5 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/proxy/DefaultProxyProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/proxy/DefaultProxyProvider.kt @@ -11,11 +11,11 @@ import android.content.Context import android.net.ConnectivityManager import android.provider.Settings import androidx.core.content.getSystemService -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber -import dev.zacsweers.metro.Inject /** * Provides the proxy settings from the system. diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt index 294917a5fa..3b3ec8996a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt @@ -7,12 +7,12 @@ package io.element.android.libraries.matrix.impl.room -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.room.StateEventType import org.matrix.rustcomponents.sdk.FilterTimelineEventType import org.matrix.rustcomponents.sdk.TimelineEventTypeFilter -import dev.zacsweers.metro.Inject interface TimelineEventTypeFilterFactory { fun create(listStateEventType: List): TimelineEventTypeFilter diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt index 6ab91f7632..90b1b2c444 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.matrix.impl.room.alias -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt index e7ee7f7d26..5a790acd7a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/join/DefaultJoinRoom.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.matrix.impl.room.join import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.JoinedRoom import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.di.SessionScope @@ -18,7 +19,6 @@ import io.element.android.libraries.matrix.api.exception.ErrorKind import io.element.android.libraries.matrix.api.room.join.JoinRoom import io.element.android.libraries.matrix.impl.analytics.toAnalyticsJoinedRoom import io.element.android.services.analytics.api.AnalyticsService -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/server/DefaultUserServerResolver.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/server/DefaultUserServerResolver.kt index cf26d07411..ff62708f65 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/server/DefaultUserServerResolver.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/server/DefaultUserServerResolver.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.matrix.impl.server import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.server.UserServerResolver -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt index e6fac6c5d4..9df7f459ac 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/tracing/RustTracingService.kt @@ -7,9 +7,10 @@ package io.element.android.libraries.matrix.impl.tracing -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.meta.BuildMeta import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.matrix.api.tracing.LogLevel import io.element.android.libraries.matrix.api.tracing.TracingConfiguration import io.element.android.libraries.matrix.api.tracing.TracingService @@ -17,7 +18,6 @@ import io.element.android.libraries.matrix.api.tracing.WriteToFilesConfiguration import org.matrix.rustcomponents.sdk.TracingFileConfiguration import org.matrix.rustcomponents.sdk.reloadTracingFileWriter import timber.log.Timber -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt index 1f63d7f001..c45eeaa0ba 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/widget/DefaultCallWidgetSettingsProvider.kt @@ -7,10 +7,11 @@ package io.element.android.libraries.matrix.impl.widget +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.widget.CallAnalyticCredentialsProvider import io.element.android.libraries.matrix.api.widget.CallWidgetSettingsProvider import io.element.android.libraries.matrix.api.widget.MatrixWidgetSettings @@ -21,7 +22,6 @@ import uniffi.matrix_sdk.EncryptionSystem import uniffi.matrix_sdk.HeaderStyle import uniffi.matrix_sdk.NotificationType import uniffi.matrix_sdk.VirtualElementCallWidgetOptions -import dev.zacsweers.metro.Inject import uniffi.matrix_sdk.Intent as CallIntent @ContributesBinding(AppScope::class) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt index 0ac53aff97..dc36eb3878 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderFactories.kt @@ -13,13 +13,13 @@ import coil3.ImageLoader import coil3.gif.AnimatedImageDecoder import coil3.gif.GifDecoder import coil3.network.okhttp.OkHttpNetworkFetcherFactory -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Provider import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClient import okhttp3.OkHttpClient -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Provider interface LoggedInImageLoaderFactory { fun newImageLoader(matrixClient: MatrixClient): ImageLoader diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderHolder.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderHolder.kt index 6d254ddbad..82080c66cc 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderHolder.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/media/ImageLoaderHolder.kt @@ -8,14 +8,14 @@ package io.element.android.libraries.matrix.ui.media import coil3.ImageLoader -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver -import dev.zacsweers.metro.Inject interface ImageLoaderHolder { fun get(client: MatrixClient): ImageLoader diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt index 2185399611..bc4443d3d3 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt @@ -7,15 +7,15 @@ package io.element.android.libraries.matrix.ui.messages -import io.element.android.libraries.di.RoomScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.runningFold -import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) @Inject diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt index 76b3421bc1..23e18c78eb 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt @@ -7,8 +7,9 @@ package io.element.android.libraries.matrix.ui.messages -import io.element.android.libraries.di.RoomScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.roomlist.RoomSummary @@ -16,7 +17,6 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.runningFold -import dev.zacsweers.metro.Inject @SingleIn(RoomScope::class) @Inject diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/LoadingRoomState.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/LoadingRoomState.kt index 76d7c61321..ef266f44f2 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/LoadingRoomState.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/room/LoadingRoomState.kt @@ -9,6 +9,7 @@ package io.element.android.libraries.matrix.ui.room import androidx.compose.runtime.Immutable import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.JoinedRoom @@ -19,7 +20,6 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn -import dev.zacsweers.metro.Inject @Immutable sealed interface LoadingRoomState { diff --git a/libraries/mediapickers/impl/src/main/kotlin/io/element/android/libraries/mediapickers/impl/DefaultPickerProvider.kt b/libraries/mediapickers/impl/src/main/kotlin/io/element/android/libraries/mediapickers/impl/DefaultPickerProvider.kt index e45390a864..b93820b97d 100644 --- a/libraries/mediapickers/impl/src/main/kotlin/io/element/android/libraries/mediapickers/impl/DefaultPickerProvider.kt +++ b/libraries/mediapickers/impl/src/main/kotlin/io/element/android/libraries/mediapickers/impl/DefaultPickerProvider.kt @@ -15,9 +15,9 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalInspectionMode import androidx.core.content.FileProvider +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.mediapickers.api.ComposePickerLauncher import io.element.android.libraries.mediapickers.api.NoOpPickerLauncher diff --git a/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/DefaultMediaPlayer.kt b/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/DefaultMediaPlayer.kt index 94703c9699..5aad37779c 100644 --- a/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/DefaultMediaPlayer.kt +++ b/libraries/mediaplayer/impl/src/main/kotlin/io/element/android/libraries/mediaplayer/impl/DefaultMediaPlayer.kt @@ -11,10 +11,11 @@ import androidx.media3.common.C import androidx.media3.common.MediaItem import androidx.media3.common.Player import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.audio.api.AudioFocus import io.element.android.libraries.audio.api.AudioFocusRequester import io.element.android.libraries.di.RoomScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.mediaplayer.api.MediaPlayer import kotlinx.coroutines.CoroutineScope @@ -28,7 +29,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.timeout import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds /** 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 7c51664443..c8e42b8abf 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 @@ -14,8 +14,8 @@ 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.annotations.ApplicationContext 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. diff --git a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MaxUploadSizeProvider.kt b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MaxUploadSizeProvider.kt index 61cbec553a..743a684b11 100644 --- a/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MaxUploadSizeProvider.kt +++ b/libraries/mediaupload/api/src/main/kotlin/io/element/android/libraries/mediaupload/api/MaxUploadSizeProvider.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.mediaupload.api -import io.element.android.libraries.matrix.api.MatrixClient import dev.zacsweers.metro.Inject +import io.element.android.libraries.matrix.api.MatrixClient /** * Provides the maximum upload size allowed by the Matrix server. diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt index f60ea50a6a..73c6e9c64a 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/AndroidMediaPreProcessor.kt @@ -12,7 +12,9 @@ import android.graphics.BitmapFactory import android.media.MediaMetadataRetriever import android.net.Uri import androidx.exifinterface.media.ExifInterface +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.file.TemporaryUriDeleter import io.element.android.libraries.androidutils.file.createTmpFile import io.element.android.libraries.androidutils.file.getFileName @@ -27,7 +29,6 @@ import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeAudio import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeImage import io.element.android.libraries.core.mimetype.MimeTypes.isMimeTypeVideo -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.media.AudioInfo import io.element.android.libraries.matrix.api.media.FileInfo @@ -45,7 +46,6 @@ import timber.log.Timber import java.io.File import java.io.InputStream import java.util.UUID -import dev.zacsweers.metro.Inject import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/DefaultMediaOptimizationConfigProvider.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/DefaultMediaOptimizationConfigProvider.kt index b25dfdcd72..f3e89730bd 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/DefaultMediaOptimizationConfigProvider.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/DefaultMediaOptimizationConfigProvider.kt @@ -8,12 +8,12 @@ package io.element.android.libraries.mediaupload.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.mediaupload.api.MediaOptimizationConfig import io.element.android.libraries.mediaupload.api.MediaOptimizationConfigProvider import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import kotlinx.coroutines.flow.first -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt index 33f097898f..3bcb367575 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ImageCompressor.kt @@ -11,6 +11,7 @@ import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import androidx.exifinterface.media.ExifInterface +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.bitmap.calculateInSampleSize import io.element.android.libraries.androidutils.bitmap.resizeToMax import io.element.android.libraries.androidutils.bitmap.rotateToExifMetadataOrientation @@ -21,7 +22,6 @@ import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.withContext import java.io.File import java.io.InputStream -import dev.zacsweers.metro.Inject @Inject class ImageCompressor( diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt index 6ca1657896..c1c90302ba 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/ThumbnailFactory.kt @@ -19,6 +19,7 @@ import android.provider.MediaStore import android.util.Size import androidx.core.net.toUri import com.vanniktech.blurhash.BlurHash +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.bitmap.resizeToMax import io.element.android.libraries.androidutils.file.createTmpFile import io.element.android.libraries.androidutils.media.runAndRelease @@ -30,7 +31,6 @@ import kotlinx.coroutines.suspendCancellableCoroutine import timber.log.Timber import java.io.File import java.io.IOException -import dev.zacsweers.metro.Inject import kotlin.coroutines.resume /** diff --git a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt index c21294fb9e..3c289ad942 100644 --- a/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt +++ b/libraries/mediaupload/impl/src/main/kotlin/io/element/android/libraries/mediaupload/impl/VideoCompressor.kt @@ -27,6 +27,7 @@ import androidx.media3.transformer.ProgressHolder import androidx.media3.transformer.TransformationRequest import androidx.media3.transformer.Transformer import androidx.media3.transformer.VideoEncoderSettings +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.file.createTmpFile import io.element.android.libraries.androidutils.file.safeDelete import io.element.android.libraries.core.extensions.runCatchingExceptions @@ -42,7 +43,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File -import dev.zacsweers.metro.Inject @Inject class VideoCompressor( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt index e361375516..152207e04d 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt @@ -10,12 +10,12 @@ package io.element.android.libraries.mediaviewer.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.architecture.createNode import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.architecture.createNode import io.element.android.libraries.mediaviewer.api.MediaGalleryEntryPoint import io.element.android.libraries.mediaviewer.impl.gallery.root.MediaGalleryRootNode -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt index 1f08f16d43..43326957fb 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt @@ -10,16 +10,16 @@ package io.element.android.libraries.mediaviewer.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.createNode import io.element.android.libraries.core.mimetype.MimeTypes -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.mediaviewer.api.MediaInfo import io.element.android.libraries.mediaviewer.api.MediaViewerEntryPoint import io.element.android.libraries.mediaviewer.impl.viewer.MediaViewerNode -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/EventItemFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/EventItemFactory.kt index 7adbfb9a4b..d6d9128869 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/EventItemFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/EventItemFactory.kt @@ -7,6 +7,7 @@ package io.element.android.libraries.mediaviewer.impl.datasource +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.api.DateFormatterMode @@ -42,7 +43,6 @@ import io.element.android.libraries.mediaviewer.api.MediaInfo import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor import io.element.android.libraries.mediaviewer.impl.model.MediaItem import timber.log.Timber -import dev.zacsweers.metro.Inject @Inject class EventItemFactory( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/FocusedTimelineMediaGalleryDataSourceFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/FocusedTimelineMediaGalleryDataSourceFactory.kt index 849899141f..1d5df9025b 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/FocusedTimelineMediaGalleryDataSourceFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/FocusedTimelineMediaGalleryDataSourceFactory.kt @@ -8,11 +8,11 @@ package io.element.android.libraries.mediaviewer.impl.datasource import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.JoinedRoom import io.element.android.libraries.mediaviewer.impl.model.MediaItem -import dev.zacsweers.metro.Inject interface FocusedTimelineMediaGalleryDataSourceFactory { fun createFor( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt index b161753e41..f40bb08a86 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaGalleryDataSource.kt @@ -8,9 +8,10 @@ package io.element.android.libraries.mediaviewer.impl.datasource import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.di.RoomScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.timeline.Timeline @@ -27,7 +28,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.flow.onEach import java.util.concurrent.atomic.AtomicBoolean -import dev.zacsweers.metro.Inject interface MediaGalleryDataSource { fun start() diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt index 2559efe9bb..678c496694 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.mediaviewer.impl.datasource +import dev.zacsweers.metro.Inject import io.element.android.libraries.mediaviewer.impl.model.GroupedMediaItems import io.element.android.libraries.mediaviewer.impl.model.MediaItem import kotlinx.collections.immutable.toImmutableList -import dev.zacsweers.metro.Inject @Inject class MediaItemsPostProcessor() { diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaTimeline.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaTimeline.kt index 1fef4480ba..c3543ba129 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaTimeline.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaTimeline.kt @@ -8,8 +8,9 @@ package io.element.android.libraries.mediaviewer.impl.datasource import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.di.RoomScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UniqueId import io.element.android.libraries.matrix.api.room.CreateTimelineParams @@ -21,7 +22,6 @@ import io.element.android.libraries.mediaviewer.impl.model.hasEvent import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import dev.zacsweers.metro.Inject interface MediaTimeline { suspend fun getTimeline(): Result diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/TimelineMediaItemsFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/TimelineMediaItemsFactory.kt index cd76ddf7fb..f4c8a83a94 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/TimelineMediaItemsFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/TimelineMediaItemsFactory.kt @@ -7,6 +7,7 @@ package io.element.android.libraries.mediaviewer.impl.datasource +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.diff.DefaultDiffCacheInvalidator import io.element.android.libraries.androidutils.diff.DiffCacheUpdater import io.element.android.libraries.androidutils.diff.MutableListDiffCache @@ -21,7 +22,6 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext -import dev.zacsweers.metro.Inject @Inject class TimelineMediaItemsFactory( diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/VirtualItemFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/VirtualItemFactory.kt index a12ff880f7..125981d4f8 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/VirtualItemFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/VirtualItemFactory.kt @@ -7,12 +7,12 @@ package io.element.android.libraries.mediaviewer.impl.datasource +import dev.zacsweers.metro.Inject import io.element.android.libraries.dateformatter.api.DateFormatter import io.element.android.libraries.dateformatter.api.DateFormatterMode import io.element.android.libraries.matrix.api.timeline.MatrixTimelineItem import io.element.android.libraries.matrix.api.timeline.item.virtual.VirtualTimelineItem import io.element.android.libraries.mediaviewer.impl.model.MediaItem -import dev.zacsweers.metro.Inject @Inject class VirtualItemFactory( 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 240208c831..ab133caaf7 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 @@ -8,13 +8,13 @@ package io.element.android.libraries.mediaviewer.impl.gallery.voice import androidx.compose.runtime.Composable -import dev.zacsweers.metro.Binds import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Inject import dev.zacsweers.metro.IntoMap -import dev.zacsweers.metro.BindingContainer -import dev.zacsweers.metro.ContributesTo import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.RoomScope import io.element.android.libraries.mediaviewer.impl.gallery.di.MediaItemEventContentKey diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt index dd284ba224..6e7508a947 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaActions.kt @@ -29,13 +29,14 @@ import androidx.compose.ui.platform.LocalContext import androidx.core.content.FileProvider import androidx.core.content.PermissionChecker import androidx.core.net.toFile +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.system.startInstallFromSourceIntent import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.mimetype.MimeTypes -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.mediaviewer.api.local.LocalMedia import kotlinx.coroutines.launch @@ -44,7 +45,6 @@ import timber.log.Timber import java.io.File import java.io.FileOutputStream import java.io.InputStream -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaFactory.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaFactory.kt index 6a14549b2e..4854c1e2f9 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaFactory.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/AndroidLocalMediaFactory.kt @@ -10,13 +10,14 @@ package io.element.android.libraries.mediaviewer.impl.local import android.content.Context import android.net.Uri import androidx.core.net.toUri +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.file.getFileName import io.element.android.libraries.androidutils.file.getFileSize import io.element.android.libraries.androidutils.file.getMimeType import io.element.android.libraries.androidutils.filesize.FileSizeFormatter import io.element.android.libraries.core.mimetype.MimeTypes -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.media.MediaFile @@ -25,7 +26,6 @@ import io.element.android.libraries.mediaviewer.api.MediaInfo import io.element.android.libraries.mediaviewer.api.local.LocalMedia import io.element.android.libraries.mediaviewer.api.local.LocalMediaFactory import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt index 633fde7ea7..1e69abecc1 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/local/DefaultLocalMediaRenderer.kt @@ -10,16 +10,16 @@ package io.element.android.libraries.mediaviewer.impl.local import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.features.viewfolder.api.TextFileViewer import io.element.android.libraries.audio.api.AudioFocus -import dev.zacsweers.metro.AppScope import io.element.android.libraries.mediaviewer.api.local.LocalMedia import io.element.android.libraries.mediaviewer.api.local.LocalMediaRenderer import me.saket.telephoto.zoomable.OverzoomEffect import me.saket.telephoto.zoomable.ZoomSpec import me.saket.telephoto.zoomable.rememberZoomableState -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt index ae2849f079..028abf8bd6 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.mediaviewer.impl.util import android.webkit.MimeTypeMap -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt index d2b7efeddf..f2015eff84 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.mediaviewer.impl.viewer +import dev.zacsweers.metro.Inject import io.element.android.libraries.mediaviewer.impl.model.MediaItem import io.element.android.libraries.mediaviewer.impl.model.eventId -import dev.zacsweers.metro.Inject /** * x and y are loading items. 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/NetworkModule.kt index 3a8ef40f15..6ede5a0c48 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/NetworkModule.kt @@ -7,12 +7,12 @@ package io.element.android.libraries.network +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.core.meta.BuildMeta -import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.network.interceptors.FormattedJsonHttpLogger import io.element.android.libraries.network.interceptors.UserAgentInterceptor import kotlinx.serialization.json.Json diff --git a/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/UserAgentInterceptor.kt b/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/UserAgentInterceptor.kt index 78920cf00a..0242774bdd 100644 --- a/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/UserAgentInterceptor.kt +++ b/libraries/network/src/main/kotlin/io/element/android/libraries/network/interceptors/UserAgentInterceptor.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.network.interceptors +import dev.zacsweers.metro.Inject import io.element.android.libraries.network.headers.HttpHeaders import io.element.android.libraries.network.useragent.UserAgentProvider import okhttp3.Interceptor import okhttp3.Response -import dev.zacsweers.metro.Inject @Inject class UserAgentInterceptor( diff --git a/libraries/network/src/main/kotlin/io/element/android/libraries/network/useragent/DefaultUserAgentProvider.kt b/libraries/network/src/main/kotlin/io/element/android/libraries/network/useragent/DefaultUserAgentProvider.kt index eac77e8a63..bf1d2a93c9 100644 --- a/libraries/network/src/main/kotlin/io/element/android/libraries/network/useragent/DefaultUserAgentProvider.kt +++ b/libraries/network/src/main/kotlin/io/element/android/libraries/network/useragent/DefaultUserAgentProvider.kt @@ -8,12 +8,12 @@ package io.element.android.libraries.network.useragent import android.os.Build -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.meta.BuildMeta import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn -import io.element.android.libraries.matrix.api.SdkMetadata +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.core.meta.BuildMeta +import io.element.android.libraries.matrix.api.SdkMetadata @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt index 94840f821c..081d5c279d 100644 --- a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt +++ b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt @@ -7,14 +7,14 @@ package io.element.android.libraries.oidc.impl -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcActionFlow import kotlinx.coroutines.flow.FlowCollector import kotlinx.coroutines.flow.MutableStateFlow -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) diff --git a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcIntentResolver.kt b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcIntentResolver.kt index e194fdb64d..42cdb14851 100644 --- a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcIntentResolver.kt +++ b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcIntentResolver.kt @@ -8,11 +8,11 @@ package io.element.android.libraries.oidc.impl import android.content.Intent -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.oidc.api.OidcAction import io.element.android.libraries.oidc.api.OidcIntentResolver -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/OidcUrlParser.kt b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/OidcUrlParser.kt index 54ee8fac4c..05257d2b0a 100644 --- a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/OidcUrlParser.kt +++ b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/OidcUrlParser.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.oidc.impl -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.auth.OidcRedirectUrlProvider import io.element.android.libraries.oidc.api.OidcAction -import dev.zacsweers.metro.Inject fun interface OidcUrlParser { fun parse(url: String): OidcAction? diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt index 8aa0c38487..e04fc741cf 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt @@ -13,8 +13,8 @@ import androidx.compose.runtime.Composable import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.PermissionState import com.google.accompanist.permissions.rememberPermissionState -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject interface ComposablePermissionStateProvider { diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionStateProvider.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionStateProvider.kt index 9eb9717515..f61147fffa 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionStateProvider.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionStateProvider.kt @@ -10,14 +10,14 @@ package io.element.android.libraries.permissions.impl import android.content.Context import android.content.pm.PackageManager import androidx.core.content.ContextCompat -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.permissions.api.PermissionStateProvider import io.element.android.libraries.permissions.api.PermissionsStore import kotlinx.coroutines.flow.Flow -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenter.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenter.kt index 021810e5e6..d7e30579ec 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenter.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/DefaultPermissionsPresenter.kt @@ -21,12 +21,12 @@ import com.google.accompanist.permissions.PermissionState import com.google.accompanist.permissions.PermissionStatus import com.google.accompanist.permissions.isGranted import com.google.accompanist.permissions.shouldShowRationale -import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import io.element.android.libraries.core.log.logger.LoggerTag -import dev.zacsweers.metro.AppScope import io.element.android.libraries.permissions.api.PermissionsEvents import io.element.android.libraries.permissions.api.PermissionsPresenter import io.element.android.libraries.permissions.api.PermissionsState diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/action/AndroidPermissionActions.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/action/AndroidPermissionActions.kt index b78863a53e..e2a3701774 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/action/AndroidPermissionActions.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/action/AndroidPermissionActions.kt @@ -8,11 +8,11 @@ package io.element.android.libraries.permissions.impl.action import android.content.Context -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.androidutils.system.startNotificationSettingsIntent import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.androidutils.system.startNotificationSettingsIntent +import io.element.android.libraries.di.annotations.ApplicationContext @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/troubleshoot/NotificationTroubleshootCheckPermissionTest.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/troubleshoot/NotificationTroubleshootCheckPermissionTest.kt index 1753e94422..19cedab019 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/troubleshoot/NotificationTroubleshootCheckPermissionTest.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/troubleshoot/NotificationTroubleshootCheckPermissionTest.kt @@ -9,8 +9,9 @@ package io.element.android.libraries.permissions.impl.troubleshoot import android.Manifest import android.os.Build -import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject import io.element.android.libraries.permissions.api.PermissionStateProvider import io.element.android.libraries.permissions.impl.R import io.element.android.libraries.permissions.impl.action.PermissionActions @@ -21,7 +22,6 @@ import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.StateFlow -import dev.zacsweers.metro.Inject @ContributesIntoSet(AppScope::class) @Inject diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt index 80999f1abd..4f24bec89e 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultSessionPreferencesStoreFactory.kt @@ -8,10 +8,11 @@ package io.element.android.libraries.preferences.impl.store import android.content.Context -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.preferences.api.store.SessionPreferencesStore import io.element.android.libraries.preferences.api.store.SessionPreferencesStoreFactory @@ -19,7 +20,6 @@ import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver import kotlinx.coroutines.CoroutineScope import java.util.concurrent.ConcurrentHashMap -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultGetCurrentPushProvider.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultGetCurrentPushProvider.kt index fa22065737..9e7ec0d651 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultGetCurrentPushProvider.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultGetCurrentPushProvider.kt @@ -7,13 +7,13 @@ package io.element.android.libraries.push.impl -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.push.api.GetCurrentPushProvider import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.services.appnavstate.api.AppNavigationStateService import io.element.android.services.appnavstate.api.currentSessionId -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt index 5397e86a7a..45a0e5b4cd 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt @@ -7,9 +7,11 @@ package io.element.android.libraries.push.impl -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.binding import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.api.GetCurrentPushProvider @@ -26,8 +28,6 @@ import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver import kotlinx.coroutines.flow.Flow import timber.log.Timber -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.binding @ContributesBinding(AppScope::class, binding = binding()) @SingleIn(AppScope::class) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriber.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriber.kt index 208c7e2a94..7b7a6a33e8 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriber.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPusherSubscriber.kt @@ -7,12 +7,13 @@ package io.element.android.libraries.push.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.appconfig.PushConfig import io.element.android.libraries.core.extensions.mapFailure import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.core.meta.BuildMeta -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.exception.ClientException @@ -23,7 +24,6 @@ import io.element.android.libraries.pushproviders.api.RegistrationFailure import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import timber.log.Timber -import dev.zacsweers.metro.Inject internal const val DEFAULT_PUSHER_FILE_TAG = "mobile" diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimization.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimization.kt index 6bb24d4a02..8379289f88 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimization.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimization.kt @@ -15,12 +15,12 @@ import android.os.PowerManager import android.provider.Settings import androidx.core.content.getSystemService import androidx.core.net.toUri -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.toolbox.api.intent.ExternalIntentLauncher import timber.log.Timber -import dev.zacsweers.metro.Inject interface BatteryOptimization { /** diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimizationPresenter.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimizationPresenter.kt index 88d2105f37..3c876ece1d 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimizationPresenter.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/battery/BatteryOptimizationPresenter.kt @@ -15,13 +15,13 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.lifecycle.compose.LifecycleResumeEffect +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.push.api.battery.BatteryOptimizationEvents import io.element.android.libraries.push.api.battery.BatteryOptimizationState import io.element.android.libraries.push.impl.push.MutableBatteryOptimizationStore import io.element.android.libraries.push.impl.store.PushDataStore import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class BatteryOptimizationPresenter( 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/PushModule.kt index 0c350ade50..bdd1dc6d7c 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/PushModule.kt @@ -9,12 +9,12 @@ package io.element.android.libraries.push.impl.di import android.content.Context import androidx.core.app.NotificationManagerCompat -import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer +import dev.zacsweers.metro.Binds import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides import io.element.android.libraries.architecture.Presenter -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.push.api.battery.BatteryOptimizationState import io.element.android.libraries.push.impl.battery.BatteryOptimizationPresenter diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/DefaultPushHistoryService.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/DefaultPushHistoryService.kt index cbbcfcdaae..c69a09b31f 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/DefaultPushHistoryService.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/history/DefaultPushHistoryService.kt @@ -11,8 +11,9 @@ import android.content.Context import android.os.Build import android.os.PowerManager import androidx.core.content.getSystemService -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId @@ -20,7 +21,6 @@ import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.impl.PushDatabase import io.element.android.libraries.push.impl.db.PushHistory import io.element.android.services.toolbox.api.systemclock.SystemClock -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject 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/PushHistoryModule.kt index f730568d0c..b1eb45e433 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/PushHistoryModule.kt @@ -8,12 +8,12 @@ package io.element.android.libraries.push.impl.history.di import android.content.Context +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides -import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.push.impl.PushDatabase import io.element.encrypteddb.SqlCipherDriverFactory import io.element.encrypteddb.passphrase.RandomSecretPassphraseProvider diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ActiveNotificationsProvider.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ActiveNotificationsProvider.kt index e6df308da5..11717c081a 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ActiveNotificationsProvider.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ActiveNotificationsProvider.kt @@ -9,14 +9,14 @@ package io.element.android.libraries.push.impl.notifications import android.service.notification.StatusBarNotification import androidx.core.app.NotificationManagerCompat -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.extensions.runCatchingExceptions import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.api.notifications.NotificationIdProvider import timber.log.Timber -import dev.zacsweers.metro.Inject interface ActiveNotificationsProvider { fun getMessageNotificationsForRoom(sessionId: SessionId, roomId: RoomId): List diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt index 1cd23004ad..8aca65bf91 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/CallNotificationEventResolver.kt @@ -7,9 +7,10 @@ package io.element.android.libraries.push.impl.notifications -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.extensions.runCatchingExceptions import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.exception.NotificationResolverException @@ -25,7 +26,6 @@ import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.withTimeoutOrNull import timber.log.Timber -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds /** diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt index 251fe5a703..6fa5366586 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotifiableEventResolver.kt @@ -10,13 +10,14 @@ package io.element.android.libraries.push.impl.notifications import android.content.Context import android.net.Uri import androidx.core.content.FileProvider +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.core.log.logger.LoggerTag -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.EventId @@ -50,7 +51,6 @@ import io.element.android.libraries.push.impl.notifications.model.ResolvedPushEv import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("DefaultNotifiableEventResolver", LoggerTag.NotificationLoggerTag) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationBitmapLoader.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationBitmapLoader.kt index 528fb60f45..545ef59c6d 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationBitmapLoader.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationBitmapLoader.kt @@ -16,8 +16,9 @@ import coil3.request.ImageRequest import coil3.request.transformations import coil3.toBitmap import coil3.transform.CircleCropTransformation -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.media.MediaSource import io.element.android.libraries.matrix.ui.media.AVATAR_THUMBNAIL_SIZE_IN_PIXEL @@ -25,7 +26,6 @@ import io.element.android.libraries.matrix.ui.media.MediaRequestData import io.element.android.libraries.push.api.notifications.NotificationBitmapLoader import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider import timber.log.Timber -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt index 8f2c7944de..41b9f66f38 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultNotificationDrawerManager.kt @@ -9,11 +9,12 @@ package io.element.android.libraries.push.impl.notifications import androidx.annotation.VisibleForTesting import androidx.core.app.NotificationManagerCompat +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.core.log.logger.LoggerTag -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.MatrixClientProvider @@ -34,7 +35,6 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("DefaultNotificationDrawerManager", LoggerTag.NotificationLoggerTag) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt index c557b06c9a..dbabb33058 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/DefaultOnMissedCallNotificationHandler.kt @@ -7,14 +7,14 @@ package io.element.android.libraries.push.impl.notifications -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.push.api.notifications.OnMissedCallNotificationHandler -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt index bb56fbe58f..57bd9bcf49 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/FallbackNotificationFactory.kt @@ -7,6 +7,7 @@ package io.element.android.libraries.push.impl.notifications +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -14,7 +15,6 @@ import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.model.FallbackNotifiableEvent import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import dev.zacsweers.metro.Inject @Inject class FallbackNotificationFactory( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationActionIds.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationActionIds.kt index 2ed72ba4d4..bd85e71b89 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationActionIds.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationActionIds.kt @@ -7,14 +7,13 @@ package io.element.android.libraries.push.impl.notifications -import io.element.android.libraries.core.meta.BuildMeta import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.meta.BuildMeta /** * Util class for creating notifications action Ids, using the application id. */ -data @Inject -class NotificationActionIds( +@Inject data class NotificationActionIds( private val buildMeta: BuildMeta, ) { val join = "${buildMeta.applicationId}.NotificationActions.JOIN_ACTION" diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt index b8913911f4..92029f84e4 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiver.kt @@ -10,8 +10,8 @@ package io.element.android.libraries.push.impl.notifications import android.content.BroadcastReceiver import android.content.Context import android.content.Intent -import io.element.android.libraries.architecture.bindings import dev.zacsweers.metro.Inject +import io.element.android.libraries.architecture.bindings /** * Receives actions broadcast by notification (on click, on dismiss, inline replies, etc.). diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverBindings.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverBindings.kt index 07643eaf84..0e5588b7b4 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverBindings.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverBindings.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.push.impl.notifications -import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesTo @ContributesTo(AppScope::class) interface NotificationBroadcastReceiverBindings { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandler.kt index 3c9b158ff5..c3df89b4a9 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationBroadcastReceiverHandler.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.push.impl.notifications import android.content.Intent +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.MatrixClientProvider @@ -31,7 +32,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import timber.log.Timber import java.util.UUID -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("NotificationBroadcastReceiverHandler", LoggerTag.NotificationLoggerTag) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDataFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDataFactory.kt index 3b1fc587a3..d5a35b046f 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDataFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDataFactory.kt @@ -13,8 +13,9 @@ import android.text.style.StyleSpan import androidx.core.text.buildSpannedString import androidx.core.text.inSpans import coil3.ImageLoader -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.user.MatrixUser @@ -25,7 +26,6 @@ import io.element.android.libraries.push.impl.notifications.model.InviteNotifiab import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.libraries.push.impl.notifications.model.SimpleNotifiableEvent import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject interface NotificationDataFactory { suspend fun toNotifications( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDisplayer.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDisplayer.kt index 16671653a5..34f141c09f 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDisplayer.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationDisplayer.kt @@ -13,11 +13,11 @@ import android.content.Context import android.content.pm.PackageManager import androidx.core.app.ActivityCompat import androidx.core.app.NotificationManagerCompat -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber -import dev.zacsweers.metro.Inject interface NotificationDisplayer { fun showNotificationMessage(tag: String?, id: Int, notification: Notification): Boolean diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationMediaRepo.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationMediaRepo.kt index 1be443281c..bf3aacd76c 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationMediaRepo.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationMediaRepo.kt @@ -7,13 +7,12 @@ package io.element.android.libraries.push.impl.notifications -import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Named import io.element.android.libraries.core.extensions.mapCatchingExceptions -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.media.MediaSource @@ -61,7 +60,7 @@ interface NotificationMediaRepo { @Inject class DefaultNotificationMediaRepo( - @Named("cacheDirectory") private val cacheDir: File, + @CacheDirectory private val cacheDir: File, private val mxcTools: MxcTools, @Assisted private val client: MatrixClient, ) : NotificationMediaRepo { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt index 225ec7bef6..5d901abbc9 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationRenderer.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.push.impl.notifications import coil3.ImageLoader +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.push.api.notifications.NotificationIdProvider @@ -18,7 +19,6 @@ import io.element.android.libraries.push.impl.notifications.model.NotifiableMess import io.element.android.libraries.push.impl.notifications.model.NotifiableRingingCallEvent import io.element.android.libraries.push.impl.notifications.model.SimpleNotifiableEvent import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("NotificationRenderer", LoggerTag.NotificationLoggerTag) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationResolverQueue.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationResolverQueue.kt index f2f6329616..f2031bdda6 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationResolverQueue.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/NotificationResolverQueue.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.push.impl.notifications import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.core.EventId @@ -24,7 +25,6 @@ import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.milliseconds /** diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt index 51a2fd334b..77cf91cbdd 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt @@ -9,8 +9,8 @@ package io.element.android.libraries.push.impl.notifications import android.content.Intent import androidx.core.app.RemoteInput -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject interface ReplyMessageExtractor { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt index ec65f4b20b..0ab6ff27b2 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/RoomGroupMessageCreator.kt @@ -10,8 +10,9 @@ package io.element.android.libraries.push.impl.notifications import android.app.Notification import android.graphics.Bitmap import coil3.ImageLoader -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.push.api.notifications.NotificationBitmapLoader @@ -20,7 +21,6 @@ import io.element.android.libraries.push.impl.notifications.factories.Notificati import io.element.android.libraries.push.impl.notifications.factories.isSmartReplyError import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject interface RoomGroupMessageCreator { suspend fun createRoomMessage( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/SummaryGroupMessageCreator.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/SummaryGroupMessageCreator.kt index b27e167a1d..5c31f03d5d 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/SummaryGroupMessageCreator.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/SummaryGroupMessageCreator.kt @@ -8,13 +8,13 @@ package io.element.android.libraries.push.impl.notifications import android.app.Notification -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.factories.NotificationCreator import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject interface SummaryGroupMessageCreator { fun createSummaryNotification( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiver.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiver.kt index c4f2c063e7..442562fe2f 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiver.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiver.kt @@ -10,9 +10,9 @@ package io.element.android.libraries.push.impl.notifications import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.bindings import io.element.android.libraries.push.impl.troubleshoot.NotificationClickHandler -import dev.zacsweers.metro.Inject class TestNotificationReceiver : BroadcastReceiver() { @Inject lateinit var notificationClickHandler: NotificationClickHandler diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiverBinding.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiverBinding.kt index 771c48ddd5..c4020c575c 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiverBinding.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/TestNotificationReceiverBinding.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.push.impl.notifications -import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesTo @ContributesTo(AppScope::class) interface TestNotificationReceiverBinding { diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannels.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannels.kt index 9a66872f9e..da5e0dc785 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannels.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/channels/NotificationChannels.kt @@ -14,13 +14,13 @@ import android.provider.Settings import androidx.annotation.ChecksSdkIntAtLeast import androidx.core.app.NotificationChannelCompat import androidx.core.app.NotificationManagerCompat -import dev.zacsweers.metro.ContributesBinding -import io.element.android.appconfig.NotificationConfig import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.push.impl.R import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject /* ========================================================================================== * IDs for channels diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/conversations/DefaultNotificationConversationService.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/conversations/DefaultNotificationConversationService.kt index 48d5d832db..2f535c9691 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/conversations/DefaultNotificationConversationService.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/conversations/DefaultNotificationConversationService.kt @@ -14,16 +14,17 @@ import android.os.Build import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.lockscreen.api.LockScreenService import io.element.android.libraries.core.coroutine.withPreviousValue import io.element.android.libraries.core.extensions.runCatchingExceptions import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize -import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -40,7 +41,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import timber.log.Timber -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt index 6eebccfea7..4856f29d0e 100755 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt @@ -17,11 +17,12 @@ import androidx.core.app.NotificationCompat.MessagingStyle import androidx.core.app.Person import androidx.core.content.res.ResourcesCompat import coil3.ImageLoader +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.designsystem.utils.CommonDrawables -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.ThreadId @@ -41,7 +42,6 @@ import io.element.android.libraries.push.impl.notifications.model.InviteNotifiab import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent import io.element.android.libraries.push.impl.notifications.model.SimpleNotifiableEvent import io.element.android.services.toolbox.api.strings.StringProvider -import dev.zacsweers.metro.Inject interface NotificationCreator { /** diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt index 3251fae9b3..9b36b0d370 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/PendingIntentFactory.kt @@ -10,6 +10,7 @@ package io.element.android.libraries.push.impl.notifications.factories import android.app.PendingIntent import android.content.Context import android.content.Intent +import dev.zacsweers.metro.Inject import io.element.android.libraries.androidutils.uri.createIgnoredUri import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.EventId @@ -22,7 +23,6 @@ import io.element.android.libraries.push.impl.notifications.NotificationBroadcas import io.element.android.libraries.push.impl.notifications.RoomEventGroupInfo import io.element.android.libraries.push.impl.notifications.TestNotificationReceiver import io.element.android.services.toolbox.api.systemclock.SystemClock -import dev.zacsweers.metro.Inject @Inject class PendingIntentFactory( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/AcceptInvitationActionFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/AcceptInvitationActionFactory.kt index 44efab5692..6e3fe95742 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/AcceptInvitationActionFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/AcceptInvitationActionFactory.kt @@ -11,6 +11,7 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import androidx.core.app.NotificationCompat +import dev.zacsweers.metro.Inject import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.androidutils.uri.createIgnoredUri import io.element.android.libraries.di.annotations.ApplicationContext @@ -21,7 +22,6 @@ import io.element.android.libraries.push.impl.notifications.model.InviteNotifiab import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import dev.zacsweers.metro.Inject @Inject class AcceptInvitationActionFactory( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/MarkAsReadActionFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/MarkAsReadActionFactory.kt index d99fde4da1..1feaee7954 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/MarkAsReadActionFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/MarkAsReadActionFactory.kt @@ -11,6 +11,7 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import androidx.core.app.NotificationCompat +import dev.zacsweers.metro.Inject import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.androidutils.uri.createIgnoredUri import io.element.android.libraries.di.annotations.ApplicationContext @@ -20,7 +21,6 @@ import io.element.android.libraries.push.impl.notifications.NotificationBroadcas import io.element.android.libraries.push.impl.notifications.RoomEventGroupInfo import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import dev.zacsweers.metro.Inject @Inject class MarkAsReadActionFactory( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt index 0472f07030..eb54bf9b36 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/QuickReplyActionFactory.kt @@ -13,6 +13,7 @@ import android.content.Intent import android.os.Build import androidx.core.app.NotificationCompat import androidx.core.app.RemoteInput +import dev.zacsweers.metro.Inject import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.androidutils.uri.createIgnoredUri import io.element.android.libraries.di.annotations.ApplicationContext @@ -26,7 +27,6 @@ import io.element.android.libraries.push.impl.notifications.NotificationBroadcas import io.element.android.libraries.push.impl.notifications.RoomEventGroupInfo import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import dev.zacsweers.metro.Inject @Inject class QuickReplyActionFactory( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/RejectInvitationActionFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/RejectInvitationActionFactory.kt index d761f01c66..73b3fc2fd9 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/RejectInvitationActionFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/action/RejectInvitationActionFactory.kt @@ -11,6 +11,7 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import androidx.core.app.NotificationCompat +import dev.zacsweers.metro.Inject import io.element.android.appconfig.NotificationConfig import io.element.android.libraries.androidutils.uri.createIgnoredUri import io.element.android.libraries.di.annotations.ApplicationContext @@ -21,7 +22,6 @@ import io.element.android.libraries.push.impl.notifications.model.InviteNotifiab import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.services.toolbox.api.strings.StringProvider import io.element.android.services.toolbox.api.systemclock.SystemClock -import dev.zacsweers.metro.Inject @Inject class RejectInvitationActionFactory( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt index 6145b6ef08..9dafe93569 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/DefaultPushHandler.kt @@ -7,13 +7,14 @@ package io.element.android.libraries.push.impl.push +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.features.call.api.CallType import io.element.android.features.call.api.ElementCallEntryPoint import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.core.meta.BuildMeta -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.auth.MatrixAuthenticationService import io.element.android.libraries.matrix.api.exception.NotificationResolverException @@ -43,7 +44,6 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("PushHandler", LoggerTag.PushLoggerTag) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/IncrementPushDataStore.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/IncrementPushDataStore.kt index 38a8d372ce..cf7145e3ef 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/IncrementPushDataStore.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/IncrementPushDataStore.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.push.impl.push -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.libraries.push.impl.store.DefaultPushDataStore +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.push.impl.store.DefaultPushDataStore interface IncrementPushDataStore { suspend fun incrementPushCounter() diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/MutableBatteryOptimizationStore.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/MutableBatteryOptimizationStore.kt index 1c984a8ec5..3c5efe70ba 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/MutableBatteryOptimizationStore.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/MutableBatteryOptimizationStore.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.push.impl.push -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.libraries.push.impl.store.DefaultPushDataStore +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.push.impl.store.DefaultPushDataStore interface MutableBatteryOptimizationStore { suspend fun showBatteryOptimizationBanner() diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt index 2732f6a402..6daee8f137 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnNotifiableEventReceived.kt @@ -7,15 +7,15 @@ package io.element.android.libraries.push.impl.push -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.push.impl.notifications.DefaultNotificationDrawerManager import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent import io.element.android.libraries.push.impl.notifications.model.NotifiableRingingCallEvent import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject interface OnNotifiableEventReceived { fun onNotifiableEventsReceived(notifiableEvents: List) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnRedactedEventReceived.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnRedactedEventReceived.kt index a0ab66705f..dda61f1eb0 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnRedactedEventReceived.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/OnRedactedEventReceived.kt @@ -14,10 +14,11 @@ import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat.MessagingStyle import androidx.core.text.buildSpannedString import androidx.core.text.inSpans -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.AppCoroutineScope +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.push.impl.notifications.ActiveNotificationsProvider import io.element.android.libraries.push.impl.notifications.NotificationDisplayer import io.element.android.libraries.push.impl.notifications.factories.DefaultNotificationCreator @@ -27,7 +28,6 @@ import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject interface OnRedactedEventReceived { fun onRedactedEventsReceived(redactions: List) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt index d6427fdcf2..e3384a9b9b 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/SyncOnNotifiableEvent.kt @@ -7,6 +7,7 @@ package io.element.android.libraries.push.impl.push +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.featureflag.api.FeatureFlagService import io.element.android.libraries.featureflag.api.FeatureFlags @@ -16,7 +17,6 @@ import io.element.android.services.appnavstate.api.AppForegroundStateService import kotlinx.coroutines.delay import kotlinx.coroutines.withContext import timber.log.Timber -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds @Inject diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayApiFactory.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayApiFactory.kt index 3fbaa6f34d..e57d98d796 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayApiFactory.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayApiFactory.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.push.impl.pushgateway -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.libraries.network.RetrofitFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.network.RetrofitFactory interface PushGatewayApiFactory { fun create(baseUrl: String): PushGatewayAPI diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayNotifyRequest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayNotifyRequest.kt index 4d7d332170..65f5f8a139 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayNotifyRequest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/pushgateway/PushGatewayNotifyRequest.kt @@ -6,12 +6,12 @@ */ package io.element.android.libraries.push.impl.pushgateway -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.push.api.gateway.PushGatewayFailure -import dev.zacsweers.metro.Inject interface PushGatewayNotifyRequest { data class Params( diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/test/TestPush.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/test/TestPush.kt index 30158068cb..c49bc48b6f 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/test/TestPush.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/test/TestPush.kt @@ -7,14 +7,14 @@ package io.element.android.libraries.push.impl.test -import dev.zacsweers.metro.ContributesBinding -import io.element.android.appconfig.PushConfig import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.appconfig.PushConfig import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.push.impl.pushgateway.PushGatewayNotifyRequest import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig -import dev.zacsweers.metro.Inject interface TestPush { suspend fun execute(config: CurrentUserPushConfig) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/CurrentPushProviderTest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/CurrentPushProviderTest.kt index 1fd8040d54..779375351b 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/CurrentPushProviderTest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/CurrentPushProviderTest.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.push.impl.troubleshoot +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.api.GetCurrentPushProvider import io.element.android.libraries.push.impl.R import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTest diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt index d7d47c1aaf..e909ee0cab 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.push.impl.troubleshoot import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @Inject diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt index b599cdf5d1..180c50ad26 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.push.impl.troubleshoot import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @Inject diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt index d8c87e60b7..c29ff739d9 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationTest.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.push.impl.troubleshoot +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.notifications.NotificationDisplayer import io.element.android.libraries.push.impl.notifications.factories.NotificationCreator diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt index 4324ffd19f..fede1a7099 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushLoopbackTest.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.push.impl.troubleshoot +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.api.PushService import io.element.android.libraries.push.api.gateway.PushGatewayFailure import io.element.android.libraries.push.impl.R diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushProvidersTest.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushProvidersTest.kt index 09eccddedd..d173404732 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushProvidersTest.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/PushProvidersTest.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.push.impl.troubleshoot +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.push.impl.R import io.element.android.libraries.pushproviders.api.PushProvider import io.element.android.libraries.troubleshoot.api.test.NotificationTroubleshootTest diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt index bf36ba97d7..a872808e16 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseGatewayProvider.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.firebase -import dev.zacsweers.metro.ContributesBinding -import io.element.android.features.enterprise.api.EnterpriseService import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.features.enterprise.api.EnterpriseService interface FirebaseGatewayProvider { fun getFirebaseGateway(): String diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt index 5ca15057ce..2853d52685 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseNewTokenHandler.kt @@ -7,10 +7,11 @@ package io.element.android.libraries.pushproviders.firebase +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.log.logger.LoggerTag -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.pushproviders.api.PusherSubscriber @@ -18,7 +19,6 @@ import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.libraries.sessionstorage.api.SessionStore import io.element.android.libraries.sessionstorage.api.toUserList import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("FirebaseNewTokenHandler", LoggerTag.PushLoggerTag) diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt index 945ea5711d..b0993754e6 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.pushproviders.firebase -import io.element.android.libraries.pushproviders.api.PushData import dev.zacsweers.metro.Inject +import io.element.android.libraries.pushproviders.api.PushData @Inject class FirebasePushParser() { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt index 3980560049..806eb98bf5 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushProvider.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.firebase +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject import io.element.android.libraries.core.log.logger.LoggerTag -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseStore.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseStore.kt index a1c70e2c05..91fec3bb57 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseStore.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseStore.kt @@ -9,13 +9,13 @@ package io.element.android.libraries.pushproviders.firebase import android.content.SharedPreferences import androidx.core.content.edit -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.onCompletion import kotlinx.coroutines.flow.onStart -import dev.zacsweers.metro.Inject /** * This class store the Firebase token in SharedPrefs. diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenDeleter.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenDeleter.kt index 9034686304..4a8be152ad 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenDeleter.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenDeleter.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.pushproviders.firebase import com.google.firebase.messaging.FirebaseMessaging -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import timber.log.Timber +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import timber.log.Timber import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlin.coroutines.suspendCoroutine diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenGetter.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenGetter.kt index 216b80f6aa..4add5e4f8b 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenGetter.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenGetter.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.pushproviders.firebase import com.google.firebase.messaging.FirebaseMessaging -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import timber.log.Timber +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import timber.log.Timber import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlin.coroutines.suspendCoroutine diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenRotator.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenRotator.kt index 197a1b36c6..c54221aa38 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenRotator.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTokenRotator.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.firebase -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.extensions.runCatchingExceptions import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.extensions.runCatchingExceptions interface FirebaseTokenRotator { suspend fun rotate(): Result diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTroubleshooter.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTroubleshooter.kt index 20ef932be5..132996ee34 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTroubleshooter.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebaseTroubleshooter.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.firebase -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.extensions.runCatchingExceptions import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.extensions.runCatchingExceptions interface FirebaseTroubleshooter { suspend fun troubleshoot(): Result diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt index 9f8888b7c7..8e25407a91 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/IsPlayServiceAvailable.kt @@ -10,11 +10,11 @@ package io.element.android.libraries.pushproviders.firebase import android.content.Context import com.google.android.gms.common.ConnectionResult import com.google.android.gms.common.GoogleApiAvailabilityLight -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import timber.log.Timber -import dev.zacsweers.metro.Inject interface IsPlayServiceAvailable { fun isAvailable(): Boolean diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt index d64be7924a..0b407e467c 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt @@ -9,6 +9,7 @@ package io.element.android.libraries.pushproviders.firebase import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.RemoteMessage +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.bindings import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.di.annotations.AppCoroutineScope @@ -16,7 +17,6 @@ import io.element.android.libraries.pushproviders.api.PushHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("VectorFirebaseMessagingService", LoggerTag.PushLoggerTag) diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingServiceBindings.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingServiceBindings.kt index 4bb493ace6..0f3e109fef 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingServiceBindings.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingServiceBindings.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.pushproviders.firebase -import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesTo @ContributesTo(AppScope::class) interface VectorFirebaseMessagingServiceBindings { diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseAvailabilityTest.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseAvailabilityTest.kt index f094c120a2..5e90dd84b5 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseAvailabilityTest.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseAvailabilityTest.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.pushproviders.firebase.troubleshoot +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushproviders.firebase.FirebaseConfig import io.element.android.libraries.pushproviders.firebase.IsPlayServiceAvailable import io.element.android.libraries.pushproviders.firebase.R diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseTokenTest.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseTokenTest.kt index 95d66a2842..2d6ec699da 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseTokenTest.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/troubleshoot/FirebaseTokenTest.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.pushproviders.firebase.troubleshoot +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushproviders.firebase.FirebaseConfig import io.element.android.libraries.pushproviders.firebase.FirebaseStore import io.element.android.libraries.pushproviders.firebase.FirebaseTroubleshooter diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt index 28c791cdb8..d330b2b7fe 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/DefaultPushGatewayHttpUrlProvider.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.unifiedpush -import dev.zacsweers.metro.ContributesBinding -import io.element.android.features.enterprise.api.EnterpriseService import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.features.enterprise.api.EnterpriseService interface DefaultPushGatewayHttpUrlProvider { fun provide(): String diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt index 24587c85e6..cfd96c2010 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.pushproviders.unifiedpush -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject interface GuardServiceStarter { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt index 272b111ff5..2f300f891d 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/RegisterUnifiedPushUseCase.kt @@ -8,8 +8,9 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.pushproviders.api.Distributor import io.element.android.libraries.pushproviders.unifiedpush.registration.EndpointRegistrationHandler @@ -17,7 +18,6 @@ import kotlinx.coroutines.flow.filter import kotlinx.coroutines.flow.first import kotlinx.coroutines.withTimeout import org.unifiedpush.android.connector.UnifiedPush -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.seconds interface RegisterUnifiedPushUseCase { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushApiFactory.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushApiFactory.kt index 2bd4d24f9d..6427b6bd00 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushApiFactory.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushApiFactory.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.pushproviders.unifiedpush -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.network.RetrofitFactory import io.element.android.libraries.pushproviders.unifiedpush.network.UnifiedPushApi -import dev.zacsweers.metro.Inject interface UnifiedPushApiFactory { fun create(baseUrl: String): UnifiedPushApi diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushCurrentUserPushConfigProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushCurrentUserPushConfigProvider.kt index 0aaf14bdf4..ba7301e010 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushCurrentUserPushConfigProvider.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushCurrentUserPushConfigProvider.kt @@ -7,13 +7,13 @@ package io.element.android.libraries.pushproviders.unifiedpush -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import io.element.android.services.appnavstate.api.AppNavigationStateService import io.element.android.services.appnavstate.api.currentSessionId -import dev.zacsweers.metro.Inject interface UnifiedPushCurrentUserPushConfigProvider { suspend fun provide(): CurrentUserPushConfig? diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushDistributorProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushDistributorProvider.kt index 1c638d8967..aad8d9cd0b 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushDistributorProvider.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushDistributorProvider.kt @@ -8,13 +8,13 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.androidutils.system.getApplicationLabel import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.androidutils.system.getApplicationLabel import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.pushproviders.api.Distributor import org.unifiedpush.android.connector.UnifiedPush -import dev.zacsweers.metro.Inject interface UnifiedPushDistributorProvider { fun getDistributors(): List diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayResolver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayResolver.kt index ed6bb6d4a3..1aa6b5d436 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayResolver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayResolver.kt @@ -7,17 +7,17 @@ package io.element.android.libraries.pushproviders.unifiedpush +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.core.log.logger.LoggerTag -import dev.zacsweers.metro.AppScope import kotlinx.coroutines.withContext import retrofit2.HttpException import timber.log.Timber import java.net.HttpURLConnection import java.net.URL -import dev.zacsweers.metro.Inject sealed interface UnifiedPushGatewayResolverResult { data class Success(val gateway: String) : UnifiedPushGatewayResolverResult diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt index 1d757c643e..48f8153787 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushGatewayUrlResolver.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.pushproviders.unifiedpush -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject interface UnifiedPushGatewayUrlResolver { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushNewGatewayHandler.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushNewGatewayHandler.kt index 2a65e157b3..a899c0787f 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushNewGatewayHandler.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushNewGatewayHandler.kt @@ -7,16 +7,16 @@ package io.element.android.libraries.pushproviders.unifiedpush +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.flatMap import io.element.android.libraries.core.log.logger.LoggerTag -import dev.zacsweers.metro.AppScope import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.pushproviders.api.PusherSubscriber import io.element.android.libraries.pushstore.api.UserPushStoreFactory import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("DefaultUnifiedPushNewGatewayHandler", LoggerTag.PushLoggerTag) diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt index 70e16f29d4..a1e43c47d9 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.unifiedpush +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.pushproviders.api.PushData import kotlinx.serialization.json.Json -import dev.zacsweers.metro.Inject @Inject class UnifiedPushParser() { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt index 6f2822c533..03b754e26f 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushProvider.kt @@ -7,15 +7,15 @@ package io.element.android.libraries.pushproviders.unifiedpush -import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.pushproviders.api.CurrentUserPushConfig import io.element.android.libraries.pushproviders.api.Distributor import io.element.android.libraries.pushproviders.api.PushProvider import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret -import dev.zacsweers.metro.Inject @ContributesIntoSet(AppScope::class) @Inject diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushStore.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushStore.kt index 89d8efff85..96c92b09d8 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushStore.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushStore.kt @@ -10,11 +10,11 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context import android.content.SharedPreferences import androidx.core.content.edit -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.UserId -import dev.zacsweers.metro.Inject interface UnifiedPushStore { fun getEndpoint(clientSecret: String): String? diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt index a0c7846895..429c23d747 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnregisterUnifiedPushUseCase.kt @@ -8,14 +8,14 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.pushproviders.api.PusherSubscriber import org.unifiedpush.android.connector.UnifiedPush import timber.log.Timber -import dev.zacsweers.metro.Inject interface UnregisterUnifiedPushUseCase { /** diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt index 0a89ef0b33..b28f1b406f 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt @@ -9,8 +9,9 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context import android.content.Intent -import io.element.android.libraries.architecture.bindings +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.log.logger.LoggerTag +import io.element.android.libraries.di.DaggerComponentOwner import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.pushproviders.api.PushHandler import io.element.android.libraries.pushproviders.unifiedpush.registration.EndpointRegistrationHandler @@ -22,8 +23,6 @@ import org.unifiedpush.android.connector.MessagingReceiver import org.unifiedpush.android.connector.data.PushEndpoint import org.unifiedpush.android.connector.data.PushMessage import timber.log.Timber -import dev.zacsweers.metro.Inject -import io.element.android.libraries.di.DaggerComponentOwner private val loggerTag = LoggerTag("VectorUnifiedPushMessagingReceiver", LoggerTag.PushLoggerTag) diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt index 610ca861a5..0bd58dcca3 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt @@ -7,8 +7,8 @@ package io.element.android.libraries.pushproviders.unifiedpush -import dev.zacsweers.metro.GraphExtension import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.GraphExtension @GraphExtension(AppScope::class) interface VectorUnifiedPushMessagingReceiverBindings { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt index d0df3fbcb9..88ddc88b58 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.pushproviders.unifiedpush.registration import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow -import dev.zacsweers.metro.Inject data class RegistrationResult( val clientSecret: String, diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/OpenDistributorWebPageAction.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/OpenDistributorWebPageAction.kt index e7011f6c8d..5f4eb4538c 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/OpenDistributorWebPageAction.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/OpenDistributorWebPageAction.kt @@ -8,12 +8,12 @@ package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot import android.content.Context -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.androidutils.system.openUrlInExternalApp import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.androidutils.system.openUrlInExternalApp import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig -import dev.zacsweers.metro.Inject interface OpenDistributorWebPageAction { fun execute() diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushMatrixGatewayTest.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushMatrixGatewayTest.kt index 534d8fc83d..b60c1e5fcf 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushMatrixGatewayTest.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushMatrixGatewayTest.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushApiFactory import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushCurrentUserPushConfigProvider diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushTest.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushTest.kt index acb8e8aa98..40f8115fd6 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushTest.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/troubleshoot/UnifiedPushTest.kt @@ -7,9 +7,9 @@ package io.element.android.libraries.pushproviders.unifiedpush.troubleshoot +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.AppScope import io.element.android.libraries.pushproviders.unifiedpush.R import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushConfig import io.element.android.libraries.pushproviders.unifiedpush.UnifiedPushDistributorProvider diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt index 458b494c60..41dbe5c212 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/DefaultUserPushStoreFactory.kt @@ -8,16 +8,16 @@ package io.element.android.libraries.pushstore.impl import android.content.Context -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import io.element.android.libraries.pushstore.api.UserPushStore import io.element.android.libraries.pushstore.api.UserPushStoreFactory import java.util.concurrent.ConcurrentHashMap -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt index 8d426b9ba0..7125a7c122 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecret.kt @@ -7,13 +7,13 @@ package io.element.android.libraries.pushstore.impl.clientsecret -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecret import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretFactory import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretStore -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt index d912b1c567..f6bd07b695 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt @@ -7,11 +7,11 @@ package io.element.android.libraries.pushstore.impl.clientsecret -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.pushstore.api.clientsecret.PushClientSecretFactory import java.util.UUID -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt index 1e7d44477e..c01703431d 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt @@ -11,10 +11,10 @@ import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.SessionScope import io.element.android.libraries.roomselect.api.RoomSelectEntryPoint -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt index b4a38cfe6d..58ee601548 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/RoomSelectSearchDataSource.kt @@ -7,6 +7,7 @@ package io.element.android.libraries.roomselect.impl +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.matrix.api.room.CurrentUserMembership import io.element.android.libraries.matrix.api.roomlist.RoomList @@ -21,7 +22,6 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import dev.zacsweers.metro.Inject private const val PAGE_SIZE = 30 diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt index c3f12c304f..69f1fc41a5 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/DatabaseSessionStore.kt @@ -10,10 +10,11 @@ package io.element.android.libraries.sessionstorage.impl import app.cash.sqldelight.coroutines.asFlow import app.cash.sqldelight.coroutines.mapToList import app.cash.sqldelight.coroutines.mapToOneOrNull -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.coroutine.CoroutineDispatchers import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.sessionstorage.api.LoggedInState import io.element.android.libraries.sessionstorage.api.SessionData import io.element.android.libraries.sessionstorage.api.SessionStore @@ -22,7 +23,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) 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/SessionStorageModule.kt index b11297396e..00bdfaf587 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/SessionStorageModule.kt @@ -8,12 +8,12 @@ package io.element.android.libraries.sessionstorage.impl.di import android.content.Context +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides -import dev.zacsweers.metro.AppScope -import io.element.android.libraries.di.annotations.ApplicationContext import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.sessionstorage.impl.SessionDatabase import io.element.encrypteddb.SqlCipherDriverFactory import io.element.encrypteddb.passphrase.RandomSecretPassphraseProvider diff --git a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/observer/DefaultSessionObserver.kt b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/observer/DefaultSessionObserver.kt index 600a659cac..78d596e5a6 100644 --- a/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/observer/DefaultSessionObserver.kt +++ b/libraries/session-storage/impl/src/main/kotlin/io/element/android/libraries/sessionstorage/impl/observer/DefaultSessionObserver.kt @@ -7,10 +7,11 @@ package io.element.android.libraries.sessionstorage.impl.observer -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.coroutine.CoroutineDispatchers import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.sessionstorage.api.SessionStore import io.element.android.libraries.sessionstorage.api.observer.SessionListener @@ -23,7 +24,6 @@ import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.util.concurrent.CopyOnWriteArraySet -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanFormatter.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanFormatter.kt index 54f6d61653..4c74a6edd5 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanFormatter.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanFormatter.kt @@ -8,12 +8,12 @@ package io.element.android.libraries.textcomposer.mentions import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.ui.messages.RoomMemberProfilesCache import io.element.android.libraries.matrix.ui.messages.RoomNamesCache -import dev.zacsweers.metro.Inject private const val EVERYONE_DISPLAY_TEXT = "@room" private const val BUBBLE_ICON = "\uD83D\uDCAC" // 💬 diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt index d2dc3d5c36..edaf417db7 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanProvider.kt @@ -7,20 +7,19 @@ package io.element.android.libraries.textcomposer.mentions +import dev.zacsweers.metro.Inject import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.RoomIdOrAlias import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser -import dev.zacsweers.metro.Inject private const val EVERYONE_MENTION_TEXT = "@room" /** * Provider for [MentionSpan]s. */ -open @Inject -class MentionSpanProvider( +@Inject open class MentionSpanProvider( private val permalinkParser: PermalinkParser, private val mentionSpanFormatter: MentionSpanFormatter, private val mentionSpanTheme: MentionSpanTheme, diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt index 2276b67e08..e23fc8e83a 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanTheme.kt @@ -30,6 +30,8 @@ import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.text.buildSpannedString +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.PreviewsDayNight @@ -38,7 +40,6 @@ import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.messageFromMeBackground import io.element.android.libraries.designsystem.theme.messageFromOtherBackground import io.element.android.libraries.di.SessionScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomAlias import io.element.android.libraries.matrix.api.core.UserId @@ -46,7 +47,6 @@ import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias import io.element.android.libraries.matrix.api.permalink.PermalinkData import io.element.android.libraries.matrix.api.permalink.PermalinkParser import kotlinx.collections.immutable.persistentListOf -import dev.zacsweers.metro.Inject /** * Theme used for mention spans. diff --git a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt index 9d299420be..9a9714b351 100644 --- a/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt +++ b/libraries/textcomposer/impl/src/main/kotlin/io/element/android/libraries/textcomposer/mentions/MentionSpanUpdater.kt @@ -13,11 +13,11 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.staticCompositionLocalOf import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.compound.theme.ElementTheme import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.ui.messages.RoomMemberProfilesCache import io.element.android.libraries.matrix.ui.messages.RoomNamesCache -import dev.zacsweers.metro.Inject interface MentionSpanUpdater { fun updateMentionSpans(text: CharSequence): CharSequence diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt index f9778628fe..d8995e9771 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.libraries.troubleshoot.impl import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.architecture.createNode import dev.zacsweers.metro.AppScope -import io.element.android.libraries.troubleshoot.api.NotificationTroubleShootEntryPoint +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.architecture.createNode +import io.element.android.libraries.troubleshoot.api.NotificationTroubleShootEntryPoint @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsPresenter.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsPresenter.kt index ad38ca6adf..753949f71b 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsPresenter.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootNotificationsPresenter.kt @@ -12,9 +12,9 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class TroubleshootNotificationsPresenter( diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootTestSuite.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootTestSuite.kt index 31edcbcf54..d0fd005307 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootTestSuite.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/TroubleshootTestSuite.kt @@ -7,6 +7,7 @@ package io.element.android.libraries.troubleshoot.impl +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.NotificationTroubleshoot import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.push.api.GetCurrentPushProvider @@ -20,7 +21,6 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import dev.zacsweers.metro.Inject @Inject class TroubleshootTestSuite( diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt index 75651cc5a1..7895508d36 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt @@ -10,11 +10,11 @@ package io.element.android.libraries.troubleshoot.impl.history import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.architecture.createNode import dev.zacsweers.metro.AppScope -import io.element.android.libraries.troubleshoot.api.PushHistoryEntryPoint +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.libraries.architecture.createNode +import io.element.android.libraries.troubleshoot.api.PushHistoryEntryPoint @ContributesBinding(AppScope::class) @Inject diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenter.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenter.kt index f7d7d78110..77c38435c3 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenter.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenter.kt @@ -14,13 +14,13 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.AsyncAction import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.push.api.PushService import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch -import dev.zacsweers.metro.Inject @Inject class PushHistoryPresenter( diff --git a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt index eae739e87f..2d968cfb20 100644 --- a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt +++ b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserListDataSource.kt @@ -8,12 +8,12 @@ package io.element.android.libraries.usersearch.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.usersearch.api.UserListDataSource -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt index daef3bfdc6..c486c898e1 100644 --- a/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt +++ b/libraries/usersearch/impl/src/main/kotlin/io/element/android/libraries/usersearch/impl/MatrixUserRepository.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.usersearch.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.MatrixPatterns @@ -20,7 +21,6 @@ import io.element.android.libraries.usersearch.api.UserSearchResultState import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePresenterFactory.kt b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePresenterFactory.kt index eb2b74bbbb..f109f3d49a 100644 --- a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePresenterFactory.kt +++ b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/DefaultVoiceMessagePresenterFactory.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.voiceplayer.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.di.RoomScope import io.element.android.libraries.di.annotations.SessionCoroutineScope @@ -17,7 +18,6 @@ import io.element.android.libraries.voiceplayer.api.VoiceMessagePresenterFactory import io.element.android.libraries.voiceplayer.api.VoiceMessageState import io.element.android.services.analytics.api.AnalyticsService import kotlinx.coroutines.CoroutineScope -import dev.zacsweers.metro.Inject import kotlin.time.Duration @ContributesBinding(RoomScope::class) diff --git a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessageMediaRepo.kt b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessageMediaRepo.kt index c8987e2576..ccee1c4c18 100644 --- a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessageMediaRepo.kt +++ b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessageMediaRepo.kt @@ -7,11 +7,10 @@ package io.element.android.libraries.voiceplayer.impl -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Named import io.element.android.libraries.core.extensions.mapCatchingExceptions import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.di.RoomScope @@ -59,7 +58,7 @@ interface VoiceMessageMediaRepo { @Inject class DefaultVoiceMessageMediaRepo( - @Named("cacheDirectory") private val cacheDir: File, + @CacheDirectory private val cacheDir: File, mxcTools: MxcTools, private val matrixMediaLoader: MatrixMediaLoader, @Assisted private val mediaSource: MediaSource, diff --git a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessagePlayer.kt b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessagePlayer.kt index 8a1cf2c46d..64a479105d 100644 --- a/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessagePlayer.kt +++ b/libraries/voiceplayer/impl/src/main/kotlin/io/element/android/libraries/voiceplayer/impl/VoiceMessagePlayer.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.voiceplayer.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.mapCatchingExceptions import io.element.android.libraries.core.mimetype.MimeTypes import io.element.android.libraries.di.RoomScope @@ -20,7 +21,6 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.update import java.io.File -import dev.zacsweers.metro.Inject /** * A media player specialized in playing a single voice message. diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorder.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorder.kt index 49f81c7ac4..624282edef 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorder.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/DefaultVoiceRecorder.kt @@ -10,11 +10,12 @@ package io.element.android.libraries.voicerecorder.impl import android.Manifest import androidx.annotation.RequiresPermission import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import io.element.android.appconfig.VoiceMessageConfig import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.core.coroutine.childScope import io.element.android.libraries.di.RoomScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.voicerecorder.api.VoiceRecorder import io.element.android.libraries.voicerecorder.api.VoiceRecorderState @@ -37,7 +38,6 @@ import kotlinx.coroutines.yield import timber.log.Timber import java.io.File import java.util.UUID -import dev.zacsweers.metro.Inject import kotlin.time.Duration.Companion.milliseconds import kotlin.time.TimeSource diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt index 744cd0959d..c27bb03e10 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt @@ -8,8 +8,8 @@ package io.element.android.libraries.voicerecorder.impl.audio import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.di.RoomScope import dev.zacsweers.metro.Inject +import io.element.android.libraries.di.RoomScope import kotlin.math.log10 import kotlin.math.sqrt diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DefaultEncoder.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DefaultEncoder.kt index 3919548120..ef02a45160 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DefaultEncoder.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DefaultEncoder.kt @@ -8,12 +8,12 @@ package io.element.android.libraries.voicerecorder.impl.audio import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.Provider import io.element.android.libraries.di.RoomScope import io.element.android.opusencoder.OggOpusEncoder import timber.log.Timber import java.io.File -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Provider /** * Safe wrapper for OggOpusEncoder. diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/file/DefaultVoiceFileManager.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/file/DefaultVoiceFileManager.kt index ebde7185d4..768233cfe8 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/file/DefaultVoiceFileManager.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/file/DefaultVoiceFileManager.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.voicerecorder.impl.file import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.hash.md5 import io.element.android.libraries.di.CacheDirectory import io.element.android.libraries.di.RoomScope @@ -15,13 +16,11 @@ import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.BaseRoom import java.io.File import java.util.UUID -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.Named @ContributesBinding(RoomScope::class) @Inject class DefaultVoiceFileManager( - @Named("cacheDirectory") private val cacheDir: File, + @CacheDirectory private val cacheDir: File, private val config: VoiceFileConfig, room: BaseRoom, ) : VoiceFileManager { diff --git a/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultSessionWellknownRetriever.kt b/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultSessionWellknownRetriever.kt index b03a44f98c..81bbab5ab8 100644 --- a/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultSessionWellknownRetriever.kt +++ b/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultSessionWellknownRetriever.kt @@ -8,6 +8,7 @@ package io.element.android.libraries.wellknown.impl import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.extensions.mapCatchingExceptions import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient @@ -16,7 +17,6 @@ import io.element.android.libraries.wellknown.api.SessionWellknownRetriever import io.element.android.libraries.wellknown.api.WellKnown import kotlinx.serialization.json.Json import timber.log.Timber -import dev.zacsweers.metro.Inject @ContributesBinding(SessionScope::class) @Inject diff --git a/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultWellknownRetriever.kt b/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultWellknownRetriever.kt index d84092fa6a..aa0e28e85a 100644 --- a/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultWellknownRetriever.kt +++ b/libraries/wellknown/impl/src/main/kotlin/io/element/android/libraries/wellknown/impl/DefaultWellknownRetriever.kt @@ -7,15 +7,15 @@ package io.element.android.libraries.wellknown.impl -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.uri.ensureProtocol import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.core.uri.ensureProtocol import io.element.android.libraries.network.RetrofitFactory import io.element.android.libraries.wellknown.api.ElementWellKnown import io.element.android.libraries.wellknown.api.WellKnown import io.element.android.libraries.wellknown.api.WellknownRetriever import timber.log.Timber -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt index 36b59b7025..1df6c3ca6a 100644 --- a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt +++ b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultAnalyticsService.kt @@ -7,13 +7,15 @@ package io.element.android.services.analytics.impl +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn +import dev.zacsweers.metro.binding import im.vector.app.features.analytics.itf.VectorAnalyticsEvent import im.vector.app.features.analytics.itf.VectorAnalyticsScreen import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.sessionstorage.api.observer.SessionListener import io.element.android.libraries.sessionstorage.api.observer.SessionObserver @@ -27,8 +29,6 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import timber.log.Timber import java.util.concurrent.atomic.AtomicBoolean -import dev.zacsweers.metro.Inject -import dev.zacsweers.metro.binding @SingleIn(AppScope::class) @ContributesBinding(AppScope::class, binding = binding()) diff --git a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultScreenTracker.kt b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultScreenTracker.kt index 961ecfd842..78ff13e554 100644 --- a/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultScreenTracker.kt +++ b/services/analytics/impl/src/main/kotlin/io/element/android/services/analytics/impl/DefaultScreenTracker.kt @@ -13,14 +13,14 @@ import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.lifecycle.Lifecycle +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.plan.MobileScreen import io.element.android.libraries.designsystem.utils.OnLifecycleEvent -import dev.zacsweers.metro.AppScope import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analytics.api.ScreenTracker import io.element.android.services.toolbox.api.systemclock.SystemClock -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt index a8215caabd..e55a930660 100644 --- a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt +++ b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt @@ -7,18 +7,18 @@ package io.element.android.services.analytics.noop +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn import im.vector.app.features.analytics.itf.VectorAnalyticsEvent import im.vector.app.features.analytics.itf.VectorAnalyticsScreen import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties -import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.SingleIn import io.element.android.services.analytics.api.AnalyticsService import io.element.android.services.analyticsproviders.api.AnalyticsProvider import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -import dev.zacsweers.metro.Inject @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) diff --git a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt index 581c93b0c2..2180ae69d3 100644 --- a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt +++ b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt @@ -8,11 +8,11 @@ package io.element.android.services.analytics.noop import androidx.compose.runtime.Composable -import dev.zacsweers.metro.ContributesBinding -import im.vector.app.features.analytics.plan.MobileScreen import dev.zacsweers.metro.AppScope -import io.element.android.services.analytics.api.ScreenTracker +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import im.vector.app.features.analytics.plan.MobileScreen +import io.element.android.services.analytics.api.ScreenTracker @ContributesBinding(AppScope::class) @Inject diff --git a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PostHogFactory.kt b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PostHogFactory.kt index 200b85f0f5..3cc842817e 100644 --- a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PostHogFactory.kt +++ b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PostHogFactory.kt @@ -11,9 +11,9 @@ import android.content.Context import com.posthog.PostHogInterface import com.posthog.android.PostHogAndroid import com.posthog.android.PostHogAndroidConfig +import dev.zacsweers.metro.Inject import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.di.annotations.ApplicationContext -import dev.zacsweers.metro.Inject @Inject class PostHogFactory( diff --git a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt index bde1c99070..a8cfcc886b 100644 --- a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt +++ b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogAnalyticsProvider.kt @@ -8,16 +8,16 @@ package io.element.android.services.analyticsproviders.posthog import com.posthog.PostHogInterface +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet +import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.itf.VectorAnalyticsEvent import im.vector.app.features.analytics.itf.VectorAnalyticsScreen import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties -import dev.zacsweers.metro.AppScope import io.element.android.services.analyticsproviders.api.AnalyticsProvider import io.element.android.services.analyticsproviders.posthog.log.analyticsTag import timber.log.Timber -import dev.zacsweers.metro.Inject // private val REUSE_EXISTING_ID: String? = null // private val IGNORED_OPTIONS: Options? = null diff --git a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogEndpointConfigProvider.kt b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogEndpointConfigProvider.kt index ef9fc8935a..67705d0a45 100644 --- a/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogEndpointConfigProvider.kt +++ b/services/analyticsproviders/posthog/src/main/kotlin/io/element/android/services/analyticsproviders/posthog/PosthogEndpointConfigProvider.kt @@ -7,11 +7,11 @@ package io.element.android.services.analyticsproviders.posthog +import dev.zacsweers.metro.Inject import io.element.android.features.enterprise.api.EnterpriseService import io.element.android.libraries.core.extensions.isElement import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType -import dev.zacsweers.metro.Inject @Inject class PosthogEndpointConfigProvider( diff --git a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt index 5e0b8a364f..c83d756b30 100644 --- a/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt +++ b/services/analyticsproviders/sentry/src/main/kotlin/io/element/android/services/analyticsproviders/sentry/SentryAnalyticsProvider.kt @@ -8,6 +8,7 @@ package io.element.android.services.analyticsproviders.sentry import android.content.Context +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesIntoSet import dev.zacsweers.metro.Inject import im.vector.app.features.analytics.itf.VectorAnalyticsEvent @@ -16,7 +17,6 @@ import im.vector.app.features.analytics.plan.SuperProperties import im.vector.app.features.analytics.plan.UserProperties import io.element.android.libraries.core.meta.BuildMeta import io.element.android.libraries.core.meta.BuildType -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.analyticsproviders.api.AnalyticsProvider import io.element.android.services.analyticsproviders.sentry.log.analyticsTag diff --git a/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/DefaultAppErrorStateService.kt b/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/DefaultAppErrorStateService.kt index a548a70ffe..7d4dc8d64e 100644 --- a/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/DefaultAppErrorStateService.kt +++ b/services/apperror/impl/src/main/kotlin/io/element/android/services/apperror/impl/DefaultAppErrorStateService.kt @@ -7,15 +7,15 @@ package io.element.android.services.apperror.impl -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import io.element.android.services.apperror.api.AppErrorState import io.element.android.services.apperror.api.AppErrorStateService import io.element.android.services.toolbox.api.strings.StringProvider import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) diff --git a/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/ActiveRoomsHolder.kt b/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/ActiveRoomsHolder.kt index fab97e89c6..07050d7bea 100644 --- a/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/ActiveRoomsHolder.kt +++ b/services/appnavstate/api/src/main/kotlin/io/element/android/services/appnavstate/api/ActiveRoomsHolder.kt @@ -8,12 +8,12 @@ package io.element.android.services.appnavstate.api import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.room.JoinedRoom import java.util.concurrent.ConcurrentHashMap -import dev.zacsweers.metro.Inject /** * Holds the active rooms for a given session so they can be reused instead of instantiating new ones. diff --git a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt index 49be1fdd30..013ce5459f 100644 --- a/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt +++ b/services/appnavstate/impl/src/main/kotlin/io/element/android/services/appnavstate/impl/DefaultAppNavigationStateService.kt @@ -7,10 +7,11 @@ package io.element.android.services.appnavstate.impl -import dev.zacsweers.metro.ContributesBinding -import io.element.android.libraries.core.log.logger.LoggerTag import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId @@ -26,7 +27,6 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.getAndUpdate import kotlinx.coroutines.launch import timber.log.Timber -import dev.zacsweers.metro.Inject private val loggerTag = LoggerTag("Navigation") 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/AppNavStateModule.kt index 5f84781bed..326d4de059 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/AppNavStateModule.kt @@ -9,10 +9,10 @@ package io.element.android.services.appnavstate.impl.di import android.content.Context import androidx.startup.AppInitializer +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides -import dev.zacsweers.metro.AppScope import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.appnavstate.api.AppForegroundStateService import io.element.android.services.appnavstate.impl.initializer.AppForegroundStateServiceInitializer diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/intent/DefaultExternalIntentLauncher.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/intent/DefaultExternalIntentLauncher.kt index 8dd2924ffe..431bb49e57 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/intent/DefaultExternalIntentLauncher.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/intent/DefaultExternalIntentLauncher.kt @@ -9,11 +9,11 @@ package io.element.android.services.toolbox.impl.intent import android.content.Context import android.content.Intent -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.services.toolbox.api.intent.ExternalIntentLauncher -import dev.zacsweers.metro.Inject @ContributesBinding(AppScope::class) @Inject diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt index 163f60caad..8d6c489750 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt @@ -8,10 +8,10 @@ package io.element.android.services.toolbox.impl.sdk import android.os.Build -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider @ContributesBinding(AppScope::class) @Inject diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/strings/AndroidStringProvider.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/strings/AndroidStringProvider.kt index bd22feed54..1e07f77f20 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/strings/AndroidStringProvider.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/strings/AndroidStringProvider.kt @@ -10,10 +10,10 @@ package io.element.android.services.toolbox.impl.strings import android.content.res.Resources import androidx.annotation.PluralsRes import androidx.annotation.StringRes -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.services.toolbox.api.strings.StringProvider +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.services.toolbox.api.strings.StringProvider @ContributesBinding(AppScope::class) @Inject diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt index ab4d21eacf..00f48bfeea 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt @@ -7,10 +7,10 @@ package io.element.android.services.toolbox.impl.systemclock -import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.AppScope -import io.element.android.services.toolbox.api.systemclock.SystemClock +import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject +import io.element.android.services.toolbox.api.systemclock.SystemClock @ContributesBinding(AppScope::class) @Inject 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/TimeModule.kt index ba799d0eca..c1aa2c8be4 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/TimeModule.kt @@ -7,10 +7,10 @@ package io.element.android.services.toolbox.impl.systemclock +import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo import dev.zacsweers.metro.Provides -import dev.zacsweers.metro.AppScope import kotlin.time.TimeSource @BindingContainer From 60cdf61cf2a1e4f56c6ec109b61dc24dd3a9de12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 25 Aug 2025 08:47:48 +0200 Subject: [PATCH 03/13] Use version 0.6.3 of Metro, with the bugfix we need --- gradle/libs.versions.toml | 2 +- plugins/build.gradle.kts | 3 +-- plugins/settings.gradle.kts | 3 +-- settings.gradle.kts | 6 ++---- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6c2b1c3b6b..21fe4cb63f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -52,7 +52,7 @@ dependencyAnalysis = "2.19.0" # DI dagger = "2.57.1" anvil = "0.4.1" -metro = "0.7.0-SNAPSHOT" +metro = "0.6.3" # Auto service autoservice = "1.1.1" diff --git a/plugins/build.gradle.kts b/plugins/build.gradle.kts index 61be1adc3a..2dd0933172 100644 --- a/plugins/build.gradle.kts +++ b/plugins/build.gradle.kts @@ -10,8 +10,7 @@ plugins { } repositories { - mavenLocal() - mavenCentral() + mavenCentral() google() } diff --git a/plugins/settings.gradle.kts b/plugins/settings.gradle.kts index 155b7908fb..20086e338b 100644 --- a/plugins/settings.gradle.kts +++ b/plugins/settings.gradle.kts @@ -9,8 +9,7 @@ rootProject.name = "ElementX_plugins" dependencyResolutionManagement { repositories { - mavenLocal() - mavenCentral() + mavenCentral() } versionCatalogs { create("libs") { diff --git a/settings.gradle.kts b/settings.gradle.kts index ac9dbed74e..68422ed5d4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -9,8 +9,7 @@ import java.net.URI pluginManagement { repositories { - mavenLocal() - includeBuild("plugins") + includeBuild("plugins") gradlePluginPortal() google() mavenCentral() @@ -19,8 +18,7 @@ pluginManagement { dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { - mavenLocal() - google() + google() mavenCentral() maven { url = URI("https://www.jitpack.io") From e06bacbff307bf3243765682a1acb47b08ba7e9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 25 Aug 2025 08:56:45 +0200 Subject: [PATCH 04/13] Redo DI gradle setup code --- app/build.gradle.kts | 9 +- appnav/build.gradle.kts | 4 +- features/analytics/impl/build.gradle.kts | 4 +- features/cachecleaner/api/build.gradle.kts | 4 +- features/cachecleaner/impl/build.gradle.kts | 4 +- features/call/impl/build.gradle.kts | 4 +- .../impl/build.gradle.kts | 4 +- features/createroom/impl/build.gradle.kts | 4 +- features/deactivation/impl/build.gradle.kts | 4 +- .../enterprise/impl-foss/build.gradle.kts | 4 +- features/ftue/impl/build.gradle.kts | 4 +- features/home/impl/build.gradle.kts | 4 +- features/invite/impl/build.gradle.kts | 4 +- features/invitepeople/impl/build.gradle.kts | 4 +- features/joinroom/impl/build.gradle.kts | 4 +- features/knockrequests/impl/build.gradle.kts | 4 +- features/leaveroom/impl/build.gradle.kts | 4 +- features/licenses/impl/build.gradle.kts | 4 +- features/location/impl/build.gradle.kts | 4 +- features/lockscreen/impl/build.gradle.kts | 4 +- features/login/impl/build.gradle.kts | 5 +- features/logout/impl/build.gradle.kts | 4 +- features/messages/impl/build.gradle.kts | 4 +- features/migration/impl/build.gradle.kts | 4 +- features/networkmonitor/impl/build.gradle.kts | 4 +- features/poll/impl/build.gradle.kts | 4 +- features/preferences/impl/build.gradle.kts | 4 +- features/rageshake/impl/build.gradle.kts | 4 +- features/reportroom/impl/build.gradle.kts | 4 +- .../roomaliasresolver/impl/build.gradle.kts | 4 +- features/roomcall/impl/build.gradle.kts | 4 +- features/roomdetails/impl/build.gradle.kts | 4 +- features/roomdirectory/impl/build.gradle.kts | 4 +- .../impl/build.gradle.kts | 4 +- features/securebackup/impl/build.gradle.kts | 4 +- features/share/impl/build.gradle.kts | 4 +- features/signedout/impl/build.gradle.kts | 4 +- features/startchat/impl/build.gradle.kts | 5 +- features/userprofile/impl/build.gradle.kts | 4 +- features/verifysession/impl/build.gradle.kts | 4 +- features/viewfolder/impl/build.gradle.kts | 4 +- libraries/androidutils/build.gradle.kts | 4 +- libraries/architecture/build.gradle.kts | 4 +- libraries/audio/impl/build.gradle.kts | 4 +- libraries/cryptography/impl/build.gradle.kts | 4 +- libraries/dateformatter/impl/build.gradle.kts | 4 +- libraries/deeplink/impl/build.gradle.kts | 4 +- .../eventformatter/impl/build.gradle.kts | 4 +- libraries/featureflag/impl/build.gradle.kts | 4 +- .../fullscreenintent/impl/build.gradle.kts | 4 +- libraries/indicator/impl/build.gradle.kts | 4 +- libraries/matrix/impl/build.gradle.kts | 4 +- libraries/matrixui/build.gradle.kts | 4 +- libraries/mediapickers/impl/build.gradle.kts | 4 +- libraries/mediapickers/test/build.gradle.kts | 4 +- libraries/mediaplayer/impl/build.gradle.kts | 4 +- libraries/mediaupload/api/build.gradle.kts | 4 +- libraries/mediaupload/impl/build.gradle.kts | 4 +- libraries/mediaviewer/impl/build.gradle.kts | 4 +- libraries/network/build.gradle.kts | 4 +- libraries/oidc/impl/build.gradle.kts | 4 +- libraries/permissions/impl/build.gradle.kts | 4 +- libraries/preferences/impl/build.gradle.kts | 4 +- libraries/push/impl/build.gradle.kts | 4 +- .../pushproviders/firebase/build.gradle.kts | 4 +- .../unifiedpush/build.gradle.kts | 4 +- libraries/pushstore/impl/build.gradle.kts | 4 +- libraries/roomselect/impl/build.gradle.kts | 4 +- .../session-storage/impl/build.gradle.kts | 4 +- libraries/textcomposer/impl/build.gradle.kts | 4 +- libraries/troubleshoot/impl/build.gradle.kts | 4 +- libraries/usersearch/impl/build.gradle.kts | 4 +- libraries/voiceplayer/impl/build.gradle.kts | 4 +- libraries/voicerecorder/impl/build.gradle.kts | 4 +- libraries/wellknown/impl/build.gradle.kts | 4 +- .../main/kotlin/extension/AnvilExtensions.kt | 86 ------------------- .../DependencyInjectionExtensions.kt | 49 +++++++++++ services/analytics/impl/build.gradle.kts | 4 +- services/analytics/noop/build.gradle.kts | 4 +- .../posthog/build.gradle.kts | 4 +- .../sentry/build.gradle.kts | 4 +- services/apperror/impl/build.gradle.kts | 4 +- services/appnavstate/api/build.gradle.kts | 4 +- services/appnavstate/impl/build.gradle.kts | 4 +- services/toolbox/impl/build.gradle.kts | 4 +- 85 files changed, 215 insertions(+), 259 deletions(-) delete mode 100644 plugins/src/main/kotlin/extension/AnvilExtensions.kt create mode 100644 plugins/src/main/kotlin/extension/DependencyInjectionExtensions.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c8d07a80d7..68cbb45387 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -13,7 +13,6 @@ import com.android.build.gradle.tasks.GenerateBuildConfig import com.google.firebase.appdistribution.gradle.firebaseAppDistribution import config.BuildTimeConfig import extension.AssetCopyTask -import extension.ComponentMergingStrategy import extension.GitBranchNameValueSource import extension.GitRevisionValueSource import extension.allEnterpriseImpl @@ -23,7 +22,7 @@ import extension.allServicesImpl import extension.buildConfigFieldStr import extension.koverDependencies import extension.locales -import extension.setupAnvil +import extension.setupDependencyInjection import extension.setupKover import java.util.Locale @@ -248,11 +247,7 @@ knit { } } -setupAnvil( - generateDaggerCode = true, - generateDaggerFactoriesUsingAnvil = false, - componentMergingStrategy = ComponentMergingStrategy.KSP, -) +setupDependencyInjection() dependencies { allLibrariesImpl() diff --git a/appnav/build.gradle.kts b/appnav/build.gradle.kts index 715dd79d9b..7c29626d75 100644 --- a/appnav/build.gradle.kts +++ b/appnav/build.gradle.kts @@ -8,7 +8,7 @@ @file:Suppress("UnstableApiUsage") import extension.allFeaturesApi -import extension.setupAnvil +import extension.setupDependencyInjection plugins { id("io.element.android-compose-library") @@ -19,7 +19,7 @@ android { namespace = "io.element.android.appnav" } -setupAnvil() +setupDependencyInjection() dependencies { allFeaturesApi(project) diff --git a/features/analytics/impl/build.gradle.kts b/features/analytics/impl/build.gradle.kts index f78574e51d..b722196c59 100644 --- a/features/analytics/impl/build.gradle.kts +++ b/features/analytics/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -16,7 +16,7 @@ android { namespace = "io.element.android.features.analytics.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.androidutils) diff --git a/features/cachecleaner/api/build.gradle.kts b/features/cachecleaner/api/build.gradle.kts index 7bfe8f6c5d..81f689bb63 100644 --- a/features/cachecleaner/api/build.gradle.kts +++ b/features/cachecleaner/api/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.features.cachecleaner.api" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.architecture) diff --git a/features/cachecleaner/impl/build.gradle.kts b/features/cachecleaner/impl/build.gradle.kts index 137f00e31e..45cc5fe09b 100644 --- a/features/cachecleaner/impl/build.gradle.kts +++ b/features/cachecleaner/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.features.cachecleaner.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.cachecleaner.api) diff --git a/features/call/impl/build.gradle.kts b/features/call/impl/build.gradle.kts index 13922366c2..0c9ae5a4b0 100644 --- a/features/call/impl/build.gradle.kts +++ b/features/call/impl/build.gradle.kts @@ -1,6 +1,6 @@ import extension.buildConfigFieldStr import extension.readLocalProperty -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -60,7 +60,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.appconfig) diff --git a/features/changeroommemberroles/impl/build.gradle.kts b/features/changeroommemberroles/impl/build.gradle.kts index dfe7690aed..fe5cbe3333 100644 --- a/features/changeroommemberroles/impl/build.gradle.kts +++ b/features/changeroommemberroles/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2025 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.changeroommemberroles.api) diff --git a/features/createroom/impl/build.gradle.kts b/features/createroom/impl/build.gradle.kts index d2306837d0..faf293c54d 100644 --- a/features/createroom/impl/build.gradle.kts +++ b/features/createroom/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.core) diff --git a/features/deactivation/impl/build.gradle.kts b/features/deactivation/impl/build.gradle.kts index 7694ac8bc1..3908b9d0a4 100644 --- a/features/deactivation/impl/build.gradle.kts +++ b/features/deactivation/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.androidutils) diff --git a/features/enterprise/impl-foss/build.gradle.kts b/features/enterprise/impl-foss/build.gradle.kts index 642b2fef40..2b3e236770 100644 --- a/features/enterprise/impl-foss/build.gradle.kts +++ b/features/enterprise/impl-foss/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -14,7 +14,7 @@ android { namespace = "io.element.android.features.enterprise.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.compound) diff --git a/features/ftue/impl/build.gradle.kts b/features/ftue/impl/build.gradle.kts index e95a4697ae..44ccf323b9 100644 --- a/features/ftue/impl/build.gradle.kts +++ b/features/ftue/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.ftue.api) diff --git a/features/home/impl/build.gradle.kts b/features/home/impl/build.gradle.kts index e3c8321cd5..57fefaf413 100644 --- a/features/home/impl/build.gradle.kts +++ b/features/home/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.appconfig) diff --git a/features/invite/impl/build.gradle.kts b/features/invite/impl/build.gradle.kts index d6337f65c9..6a1cec8056 100644 --- a/features/invite/impl/build.gradle.kts +++ b/features/invite/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.invite.api) diff --git a/features/invitepeople/impl/build.gradle.kts b/features/invitepeople/impl/build.gradle.kts index bdb1c6942e..9133700f06 100644 --- a/features/invitepeople/impl/build.gradle.kts +++ b/features/invitepeople/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.core) diff --git a/features/joinroom/impl/build.gradle.kts b/features/joinroom/impl/build.gradle.kts index e195efd1bc..22821a3a84 100644 --- a/features/joinroom/impl/build.gradle.kts +++ b/features/joinroom/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.joinroom.api) diff --git a/features/knockrequests/impl/build.gradle.kts b/features/knockrequests/impl/build.gradle.kts index 39004b30e0..7a93786b08 100644 --- a/features/knockrequests/impl/build.gradle.kts +++ b/features/knockrequests/impl/build.gradle.kts @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -import extension.setupAnvil +import extension.setupDependencyInjection plugins { id("io.element.android-compose-library") @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.knockrequests.api) diff --git a/features/leaveroom/impl/build.gradle.kts b/features/leaveroom/impl/build.gradle.kts index ff9eb5de95..edc663475f 100644 --- a/features/leaveroom/impl/build.gradle.kts +++ b/features/leaveroom/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.features.leaveroom.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.leaveroom.api) diff --git a/features/licenses/impl/build.gradle.kts b/features/licenses/impl/build.gradle.kts index 52589aeaf5..1fecb66b90 100644 --- a/features/licenses/impl/build.gradle.kts +++ b/features/licenses/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -17,7 +17,7 @@ android { namespace = "io.element.android.features.licenses.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.serialization.json) diff --git a/features/location/impl/build.gradle.kts b/features/location/impl/build.gradle.kts index 4c62bdff1a..93b0ef039f 100644 --- a/features/location/impl/build.gradle.kts +++ b/features/location/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -20,7 +20,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.location.api) diff --git a/features/lockscreen/impl/build.gradle.kts b/features/lockscreen/impl/build.gradle.kts index 4260e9e792..ff5f629e86 100644 --- a/features/lockscreen/impl/build.gradle.kts +++ b/features/lockscreen/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -20,7 +20,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.lockscreen.api) diff --git a/features/login/impl/build.gradle.kts b/features/login/impl/build.gradle.kts index ec01f6012a..3873ea70d7 100644 --- a/features/login/impl/build.gradle.kts +++ b/features/login/impl/build.gradle.kts @@ -1,5 +1,4 @@ -import extension.ComponentMergingStrategy -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -24,7 +23,7 @@ android { } } -setupAnvil(componentMergingStrategy = ComponentMergingStrategy.KSP) +setupDependencyInjection() dependencies { implementation(projects.appconfig) diff --git a/features/logout/impl/build.gradle.kts b/features/logout/impl/build.gradle.kts index 102b277044..09fdc1bd96 100644 --- a/features/logout/impl/build.gradle.kts +++ b/features/logout/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.androidutils) diff --git a/features/messages/impl/build.gradle.kts b/features/messages/impl/build.gradle.kts index 1519f204f6..15e087bac4 100644 --- a/features/messages/impl/build.gradle.kts +++ b/features/messages/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.messages.api) diff --git a/features/migration/impl/build.gradle.kts b/features/migration/impl/build.gradle.kts index 9314ab9da6..0a9048a5c6 100644 --- a/features/migration/impl/build.gradle.kts +++ b/features/migration/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.features.migration.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.features.migration.api) diff --git a/features/networkmonitor/impl/build.gradle.kts b/features/networkmonitor/impl/build.gradle.kts index 076cc8944d..7efe1bb118 100644 --- a/features/networkmonitor/impl/build.gradle.kts +++ b/features/networkmonitor/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -11,7 +11,7 @@ plugins { id("io.element.android-library") } -setupAnvil() +setupDependencyInjection() android { namespace = "io.element.android.features.networkmonitor.impl" diff --git a/features/poll/impl/build.gradle.kts b/features/poll/impl/build.gradle.kts index 40c44480df..200fe0f4b8 100644 --- a/features/poll/impl/build.gradle.kts +++ b/features/poll/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.poll.api) diff --git a/features/preferences/impl/build.gradle.kts b/features/preferences/impl/build.gradle.kts index a74896686d..d6c716ca87 100644 --- a/features/preferences/impl/build.gradle.kts +++ b/features/preferences/impl/build.gradle.kts @@ -1,6 +1,6 @@ import config.BuildTimeConfig import extension.buildConfigFieldStr -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -42,7 +42,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.androidutils) diff --git a/features/rageshake/impl/build.gradle.kts b/features/rageshake/impl/build.gradle.kts index 23180827fc..ea4eb33ba6 100644 --- a/features/rageshake/impl/build.gradle.kts +++ b/features/rageshake/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.appconfig) diff --git a/features/reportroom/impl/build.gradle.kts b/features/reportroom/impl/build.gradle.kts index d60cc76f8d..797fa08741 100644 --- a/features/reportroom/impl/build.gradle.kts +++ b/features/reportroom/impl/build.gradle.kts @@ -5,7 +5,7 @@ * Please see LICENSE files in the repository root for full details. */ -import extension.setupAnvil +import extension.setupDependencyInjection plugins { id("io.element.android-compose-library") @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.reportroom.api) diff --git a/features/roomaliasresolver/impl/build.gradle.kts b/features/roomaliasresolver/impl/build.gradle.kts index dcb14f6162..f70f2a6f7b 100644 --- a/features/roomaliasresolver/impl/build.gradle.kts +++ b/features/roomaliasresolver/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.roomaliasresolver.api) diff --git a/features/roomcall/impl/build.gradle.kts b/features/roomcall/impl/build.gradle.kts index 0ec555bfb5..5c69ffed36 100644 --- a/features/roomcall/impl/build.gradle.kts +++ b/features/roomcall/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.features.roomcall.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.roomcall.api) diff --git a/features/roomdetails/impl/build.gradle.kts b/features/roomdetails/impl/build.gradle.kts index 302ae7d8c6..fa5569a873 100644 --- a/features/roomdetails/impl/build.gradle.kts +++ b/features/roomdetails/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.appconfig) diff --git a/features/roomdirectory/impl/build.gradle.kts b/features/roomdirectory/impl/build.gradle.kts index 3f48136514..813d6be1ff 100644 --- a/features/roomdirectory/impl/build.gradle.kts +++ b/features/roomdirectory/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.roomdirectory.api) diff --git a/features/roommembermoderation/impl/build.gradle.kts b/features/roommembermoderation/impl/build.gradle.kts index 93294988f6..7208b5985f 100644 --- a/features/roommembermoderation/impl/build.gradle.kts +++ b/features/roommembermoderation/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2025 New Vector Ltd. @@ -20,7 +20,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.core) diff --git a/features/securebackup/impl/build.gradle.kts b/features/securebackup/impl/build.gradle.kts index 68916b4fe8..399547108b 100644 --- a/features/securebackup/impl/build.gradle.kts +++ b/features/securebackup/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.appconfig) diff --git a/features/share/impl/build.gradle.kts b/features/share/impl/build.gradle.kts index c059a24982..3f8ef152fb 100644 --- a/features/share/impl/build.gradle.kts +++ b/features/share/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.appconfig) diff --git a/features/signedout/impl/build.gradle.kts b/features/signedout/impl/build.gradle.kts index f5f1357cbc..f4da2e48a4 100644 --- a/features/signedout/impl/build.gradle.kts +++ b/features/signedout/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -16,7 +16,7 @@ android { namespace = "io.element.android.features.signedout.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.features.signedout.api) diff --git a/features/startchat/impl/build.gradle.kts b/features/startchat/impl/build.gradle.kts index ddc8a271ef..42d5263d58 100644 --- a/features/startchat/impl/build.gradle.kts +++ b/features/startchat/impl/build.gradle.kts @@ -1,5 +1,4 @@ -import extension.ComponentMergingStrategy -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -23,7 +22,7 @@ android { } } -setupAnvil(componentMergingStrategy = ComponentMergingStrategy.KSP) +setupDependencyInjection() dependencies { implementation(projects.libraries.core) diff --git a/features/userprofile/impl/build.gradle.kts b/features/userprofile/impl/build.gradle.kts index 7bcebae565..0805f0d7fc 100644 --- a/features/userprofile/impl/build.gradle.kts +++ b/features/userprofile/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.core) diff --git a/features/verifysession/impl/build.gradle.kts b/features/verifysession/impl/build.gradle.kts index 6454c893e8..b318b10fce 100644 --- a/features/verifysession/impl/build.gradle.kts +++ b/features/verifysession/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -20,7 +20,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.appconfig) diff --git a/features/viewfolder/impl/build.gradle.kts b/features/viewfolder/impl/build.gradle.kts index 015e23a85f..023f3c5762 100644 --- a/features/viewfolder/impl/build.gradle.kts +++ b/features/viewfolder/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -16,7 +16,7 @@ android { namespace = "io.element.android.features.viewfolder.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.androidutils) diff --git a/libraries/androidutils/build.gradle.kts b/libraries/androidutils/build.gradle.kts index 62cef138d2..c3ddda519b 100644 --- a/libraries/androidutils/build.gradle.kts +++ b/libraries/androidutils/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -18,7 +18,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.di) diff --git a/libraries/architecture/build.gradle.kts b/libraries/architecture/build.gradle.kts index 100722c32a..e481aff77a 100644 --- a/libraries/architecture/build.gradle.kts +++ b/libraries/architecture/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.libraries.architecture" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.di) diff --git a/libraries/audio/impl/build.gradle.kts b/libraries/audio/impl/build.gradle.kts index 61a4cd7eba..1138223752 100644 --- a/libraries/audio/impl/build.gradle.kts +++ b/libraries/audio/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2025 New Vector Ltd. @@ -14,7 +14,7 @@ android { namespace = "io.element.android.libraries.audio.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.audio.api) diff --git a/libraries/cryptography/impl/build.gradle.kts b/libraries/cryptography/impl/build.gradle.kts index def2c73346..6e517d5401 100644 --- a/libraries/cryptography/impl/build.gradle.kts +++ b/libraries/cryptography/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.libraries.cryptography.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/libraries/dateformatter/impl/build.gradle.kts b/libraries/dateformatter/impl/build.gradle.kts index ed8c7731bd..770b9a7047 100644 --- a/libraries/dateformatter/impl/build.gradle.kts +++ b/libraries/dateformatter/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -11,7 +11,7 @@ plugins { id("io.element.android-compose-library") } -setupAnvil() +setupDependencyInjection() android { namespace = "io.element.android.libraries.dateformatter.impl" diff --git a/libraries/deeplink/impl/build.gradle.kts b/libraries/deeplink/impl/build.gradle.kts index 412c162299..70bbca2336 100644 --- a/libraries/deeplink/impl/build.gradle.kts +++ b/libraries/deeplink/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.libraries.deeplink.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.deeplink.api) diff --git a/libraries/eventformatter/impl/build.gradle.kts b/libraries/eventformatter/impl/build.gradle.kts index 372325286f..2f97cab31b 100644 --- a/libraries/eventformatter/impl/build.gradle.kts +++ b/libraries/eventformatter/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.core) diff --git a/libraries/featureflag/impl/build.gradle.kts b/libraries/featureflag/impl/build.gradle.kts index bd702fafac..4cfdb546fa 100644 --- a/libraries/featureflag/impl/build.gradle.kts +++ b/libraries/featureflag/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -16,7 +16,7 @@ android { namespace = "io.element.android.libraries.featureflag.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.featureflag.api) diff --git a/libraries/fullscreenintent/impl/build.gradle.kts b/libraries/fullscreenintent/impl/build.gradle.kts index 37fbd01aca..40a65d48e8 100644 --- a/libraries/fullscreenintent/impl/build.gradle.kts +++ b/libraries/fullscreenintent/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.libraries.fullscreenintent.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.fullscreenintent.api) diff --git a/libraries/indicator/impl/build.gradle.kts b/libraries/indicator/impl/build.gradle.kts index d5046eb00c..1a5e2d560e 100644 --- a/libraries/indicator/impl/build.gradle.kts +++ b/libraries/indicator/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -11,7 +11,7 @@ plugins { id("io.element.android-compose-library") } -setupAnvil() +setupDependencyInjection() android { namespace = "io.element.android.libraries.indicator.impl" diff --git a/libraries/matrix/impl/build.gradle.kts b/libraries/matrix/impl/build.gradle.kts index 93edc25a81..c5f444b049 100644 --- a/libraries/matrix/impl/build.gradle.kts +++ b/libraries/matrix/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -16,7 +16,7 @@ android { namespace = "io.element.android.libraries.matrix.impl" } -setupAnvil() +setupDependencyInjection() dependencies { releaseImplementation(libs.matrix.sdk) diff --git a/libraries/matrixui/build.gradle.kts b/libraries/matrixui/build.gradle.kts index 3b54a0224b..e5fb78eb6d 100644 --- a/libraries/matrixui/build.gradle.kts +++ b/libraries/matrixui/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.di) diff --git a/libraries/mediapickers/impl/build.gradle.kts b/libraries/mediapickers/impl/build.gradle.kts index c21d096e92..7ca588844d 100644 --- a/libraries/mediapickers/impl/build.gradle.kts +++ b/libraries/mediapickers/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -11,7 +11,7 @@ plugins { id("io.element.android-compose-library") } -setupAnvil() +setupDependencyInjection() android { namespace = "io.element.android.libraries.mediapickers.impl" diff --git a/libraries/mediapickers/test/build.gradle.kts b/libraries/mediapickers/test/build.gradle.kts index 4b10dca551..17517d886d 100644 --- a/libraries/mediapickers/test/build.gradle.kts +++ b/libraries/mediapickers/test/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -11,7 +11,7 @@ plugins { id("io.element.android-compose-library") } -setupAnvil() +setupDependencyInjection() android { namespace = "io.element.android.libraries.mediapickers.test" diff --git a/libraries/mediaplayer/impl/build.gradle.kts b/libraries/mediaplayer/impl/build.gradle.kts index 6bd19680a3..0a0dcf5fe0 100644 --- a/libraries/mediaplayer/impl/build.gradle.kts +++ b/libraries/mediaplayer/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -14,7 +14,7 @@ android { namespace = "io.element.android.libraries.mediaplayer.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.mediaplayer.api) diff --git a/libraries/mediaupload/api/build.gradle.kts b/libraries/mediaupload/api/build.gradle.kts index ce4f8c0f60..ff14dc052f 100644 --- a/libraries/mediaupload/api/build.gradle.kts +++ b/libraries/mediaupload/api/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -11,7 +11,7 @@ plugins { id("io.element.android-library") } -setupAnvil() +setupDependencyInjection() android { namespace = "io.element.android.libraries.mediaupload.api" diff --git a/libraries/mediaupload/impl/build.gradle.kts b/libraries/mediaupload/impl/build.gradle.kts index be2637e6e1..437473a5b7 100644 --- a/libraries/mediaupload/impl/build.gradle.kts +++ b/libraries/mediaupload/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.mediaupload.api) diff --git a/libraries/mediaviewer/impl/build.gradle.kts b/libraries/mediaviewer/impl/build.gradle.kts index 311a0441c8..8221c6b77e 100644 --- a/libraries/mediaviewer/impl/build.gradle.kts +++ b/libraries/mediaviewer/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -20,7 +20,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.coroutines.core) diff --git a/libraries/network/build.gradle.kts b/libraries/network/build.gradle.kts index 9b4d905135..95f89f8d01 100644 --- a/libraries/network/build.gradle.kts +++ b/libraries/network/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -20,7 +20,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/libraries/oidc/impl/build.gradle.kts b/libraries/oidc/impl/build.gradle.kts index c0f8e9d1d6..4aa270c750 100644 --- a/libraries/oidc/impl/build.gradle.kts +++ b/libraries/oidc/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -23,7 +23,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.appconfig) diff --git a/libraries/permissions/impl/build.gradle.kts b/libraries/permissions/impl/build.gradle.kts index 347032c65e..3ab164e31a 100644 --- a/libraries/permissions/impl/build.gradle.kts +++ b/libraries/permissions/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.accompanist.permission) diff --git a/libraries/preferences/impl/build.gradle.kts b/libraries/preferences/impl/build.gradle.kts index 80988f9c07..3a21ca5cb9 100644 --- a/libraries/preferences/impl/build.gradle.kts +++ b/libraries/preferences/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.libraries.preferences.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.preferences.api) diff --git a/libraries/push/impl/build.gradle.kts b/libraries/push/impl/build.gradle.kts index d256666156..4a3da20370 100644 --- a/libraries/push/impl/build.gradle.kts +++ b/libraries/push/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -22,7 +22,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/libraries/pushproviders/firebase/build.gradle.kts b/libraries/pushproviders/firebase/build.gradle.kts index 537b29d3c6..e17234b745 100644 --- a/libraries/pushproviders/firebase/build.gradle.kts +++ b/libraries/pushproviders/firebase/build.gradle.kts @@ -8,7 +8,7 @@ @file:Suppress("UnstableApiUsage") import config.BuildTimeConfig -import extension.setupAnvil +import extension.setupDependencyInjection plugins { id("io.element.android-library") @@ -45,7 +45,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index c98d98f64e..f74d4f6c80 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.libraries.pushproviders.unifiedpush" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/libraries/pushstore/impl/build.gradle.kts b/libraries/pushstore/impl/build.gradle.kts index 3bda0aaaed..8b53e6aa07 100644 --- a/libraries/pushstore/impl/build.gradle.kts +++ b/libraries/pushstore/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -19,7 +19,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/libraries/roomselect/impl/build.gradle.kts b/libraries/roomselect/impl/build.gradle.kts index 3ded043610..5f9ebf7536 100644 --- a/libraries/roomselect/impl/build.gradle.kts +++ b/libraries/roomselect/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -16,7 +16,7 @@ android { namespace = "io.element.android.libraries.roomselect.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.core) diff --git a/libraries/session-storage/impl/build.gradle.kts b/libraries/session-storage/impl/build.gradle.kts index 76462ef035..a2b2581e1b 100644 --- a/libraries/session-storage/impl/build.gradle.kts +++ b/libraries/session-storage/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.libraries.sessionstorage.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/libraries/textcomposer/impl/build.gradle.kts b/libraries/textcomposer/impl/build.gradle.kts index 0c8af9a636..c7b4c15089 100644 --- a/libraries/textcomposer/impl/build.gradle.kts +++ b/libraries/textcomposer/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -19,7 +19,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.architecture) diff --git a/libraries/troubleshoot/impl/build.gradle.kts b/libraries/troubleshoot/impl/build.gradle.kts index f88ccc8f85..b82d5a5091 100644 --- a/libraries/troubleshoot/impl/build.gradle.kts +++ b/libraries/troubleshoot/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -21,7 +21,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/libraries/usersearch/impl/build.gradle.kts b/libraries/usersearch/impl/build.gradle.kts index d720eef9fa..6498c3a44e 100644 --- a/libraries/usersearch/impl/build.gradle.kts +++ b/libraries/usersearch/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.libraries.usersearch.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.core) diff --git a/libraries/voiceplayer/impl/build.gradle.kts b/libraries/voiceplayer/impl/build.gradle.kts index f579586aa0..b512608a0d 100644 --- a/libraries/voiceplayer/impl/build.gradle.kts +++ b/libraries/voiceplayer/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2024 New Vector Ltd. @@ -14,7 +14,7 @@ android { namespace = "io.element.android.libraries.voiceplayer.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.voiceplayer.api) diff --git a/libraries/voicerecorder/impl/build.gradle.kts b/libraries/voicerecorder/impl/build.gradle.kts index bd3f7e72cb..4fecdf7776 100644 --- a/libraries/voicerecorder/impl/build.gradle.kts +++ b/libraries/voicerecorder/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -14,7 +14,7 @@ android { namespace = "io.element.android.libraries.voicerecorder.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.voicerecorder.api) diff --git a/libraries/wellknown/impl/build.gradle.kts b/libraries/wellknown/impl/build.gradle.kts index 3bc23953a0..1d7927da57 100644 --- a/libraries/wellknown/impl/build.gradle.kts +++ b/libraries/wellknown/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2025 New Vector Ltd. @@ -17,7 +17,7 @@ android { namespace = "io.element.android.libraries.wellknown.impl" } -setupAnvil() +setupDependencyInjection() dependencies { api(projects.libraries.wellknown.api) diff --git a/plugins/src/main/kotlin/extension/AnvilExtensions.kt b/plugins/src/main/kotlin/extension/AnvilExtensions.kt deleted file mode 100644 index 2ebd991b57..0000000000 --- a/plugins/src/main/kotlin/extension/AnvilExtensions.kt +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2024 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial - * Please see LICENSE files in the repository root for full details. - */ - -package extension - -import dev.zacsweers.metro.gradle.MetroPluginExtension -import org.gradle.accessors.dm.LibrariesForLibs -import org.gradle.api.Project -import org.gradle.api.provider.Provider -import org.gradle.kotlin.dsl.the -import org.gradle.plugin.use.PluginDependency - -/** - * Setup Anvil plugin with the given configuration. - * @param generateDaggerCode whether to enable general Dagger code generation using Kapt. `false` by default. - * @param generateDaggerFactoriesUsingAnvil whether to generate Dagger factories using Anvil instead of Kapt. `true` by default. - * @param componentMergingStrategy how to perform component merging. This is `ComponentMergingStrategy.NONE` by default, which will prevent component merging - * from running. - */ -fun Project.setupAnvil( - generateDaggerCode: Boolean = false, - generateDaggerFactoriesUsingAnvil: Boolean = true, - componentMergingStrategy: ComponentMergingStrategy = ComponentMergingStrategy.NONE, -) { - val libs = the() - -// // Add dagger dependency, needed for generated code -// dependencies.implementation(libs.dagger) - - // Apply Anvil plugin and configure it - applyPluginIfNeeded(libs.plugins.metro) - applyPluginIfNeeded(libs.plugins.ksp) - -// project.pluginManager.withPlugin(libs.plugins.anvil.get().pluginId) { -// // Setup extension -// extensions.configure(AnvilExtension::class.java) { -// this.generateDaggerFactories.set(generateDaggerFactoriesUsingAnvil) -// this.disableComponentMerging.set(componentMergingStrategy == ComponentMergingStrategy.NONE) -// -// useKsp( -// contributesAndFactoryGeneration = true, -// componentMerging = componentMergingStrategy == ComponentMergingStrategy.KSP, -// ) -// } -// } - -// if (generateDaggerCode) { -// // Needed at the top level since dagger code should be generated at a single point for performance reasons -// dependencies.add("ksp", libs.dagger.compiler) -// } - - project.pluginManager.withPlugin(libs.plugins.metro.get().pluginId) { - // Setup extension - extensions.configure(MetroPluginExtension::class.java) { -// debug.set(true) -// generateAssistedFactories.set(true) -// this.generateAssistedFactories.set(generateDaggerFactoriesUsingAnvil) - } - } - - // These dependencies are only needed for compose library or application modules - if (project.pluginManager.hasPlugin("io.element.android-compose-library") - || project.pluginManager.hasPlugin("io.element.android-compose-application")) { - // Annotations to generate DI code for Appyx nodes - dependencies.implementation(project.project(":anvilannotations")) - // Code generator for the annotations above - dependencies.add("ksp", project.project(":anvilcodegen")) - } -} - -private fun Project.applyPluginIfNeeded(plugin: Provider) { - val pluginId = plugin.get().pluginId - if (!pluginManager.hasPlugin(pluginId)) { - pluginManager.apply(pluginId) - } -} - -enum class ComponentMergingStrategy { - NONE, - KAPT, - KSP -} diff --git a/plugins/src/main/kotlin/extension/DependencyInjectionExtensions.kt b/plugins/src/main/kotlin/extension/DependencyInjectionExtensions.kt new file mode 100644 index 0000000000..c15d9b0502 --- /dev/null +++ b/plugins/src/main/kotlin/extension/DependencyInjectionExtensions.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2024 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +package extension + +import org.gradle.accessors.dm.LibrariesForLibs +import org.gradle.api.Project +import org.gradle.api.provider.Provider +import org.gradle.kotlin.dsl.the +import org.gradle.plugin.use.PluginDependency + +/** + * Setup the Metro plugin with the shared configuration. + * @param generateNodeFactories Whether to set up the KSP plugin and dependencies to generate Appyx Node factories. + */ +fun Project.setupDependencyInjection( + generateNodeFactories: Boolean = shouldApplyAppyxCodegen(), +) { + val libs = the() + + // Apply Metro plugin and configure it + applyPluginIfNeeded(libs.plugins.metro) + + if (generateNodeFactories) { + applyPluginIfNeeded(libs.plugins.ksp) + + // Annotations to generate DI code for Appyx nodes + dependencies.implementation(project.project(":anvilannotations")) + // Code generator for the annotations above + dependencies.add("ksp", project.project(":anvilcodegen")) + } +} + +// These dependencies should only be needed for compose library or application modules +private fun Project.shouldApplyAppyxCodegen(): Boolean { + return project.pluginManager.hasPlugin("io.element.android-compose-library") + || project.pluginManager.hasPlugin("io.element.android-compose-application") +} + +private fun Project.applyPluginIfNeeded(plugin: Provider) { + val pluginId = plugin.get().pluginId + if (!pluginManager.hasPlugin(pluginId)) { + pluginManager.apply(pluginId) + } +} diff --git a/services/analytics/impl/build.gradle.kts b/services/analytics/impl/build.gradle.kts index 6143511f26..45b5d0a9f4 100644 --- a/services/analytics/impl/build.gradle.kts +++ b/services/analytics/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -16,7 +16,7 @@ android { namespace = "io.element.android.services.analytics.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(projects.libraries.androidutils) diff --git a/services/analytics/noop/build.gradle.kts b/services/analytics/noop/build.gradle.kts index a4255733f1..d17a4b7380 100644 --- a/services/analytics/noop/build.gradle.kts +++ b/services/analytics/noop/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -14,7 +14,7 @@ android { namespace = "io.element.android.services.analytics.noop" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/services/analyticsproviders/posthog/build.gradle.kts b/services/analyticsproviders/posthog/build.gradle.kts index 01e6dbc836..d6a03d1cb3 100644 --- a/services/analyticsproviders/posthog/build.gradle.kts +++ b/services/analyticsproviders/posthog/build.gradle.kts @@ -1,6 +1,6 @@ import config.BuildTimeConfig import extension.buildConfigFieldStr -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -31,7 +31,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/services/analyticsproviders/sentry/build.gradle.kts b/services/analyticsproviders/sentry/build.gradle.kts index 1b1c351712..08912a28b7 100644 --- a/services/analyticsproviders/sentry/build.gradle.kts +++ b/services/analyticsproviders/sentry/build.gradle.kts @@ -1,7 +1,7 @@ import config.BuildTimeConfig import extension.buildConfigFieldStr import extension.readLocalProperty -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -34,7 +34,7 @@ android { } } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) diff --git a/services/apperror/impl/build.gradle.kts b/services/apperror/impl/build.gradle.kts index 01163d240c..1e602f3ea4 100644 --- a/services/apperror/impl/build.gradle.kts +++ b/services/apperror/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -11,7 +11,7 @@ plugins { id("io.element.android-compose-library") } -setupAnvil() +setupDependencyInjection() android { namespace = "io.element.android.services.apperror.impl" diff --git a/services/appnavstate/api/build.gradle.kts b/services/appnavstate/api/build.gradle.kts index bf3f26ae68..f25cf59764 100644 --- a/services/appnavstate/api/build.gradle.kts +++ b/services/appnavstate/api/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -15,7 +15,7 @@ android { namespace = "io.element.android.services.appnavstate.api" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.coroutines.core) diff --git a/services/appnavstate/impl/build.gradle.kts b/services/appnavstate/impl/build.gradle.kts index 6a12051df8..2e82e13994 100644 --- a/services/appnavstate/impl/build.gradle.kts +++ b/services/appnavstate/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -11,7 +11,7 @@ plugins { id("io.element.android-library") } -setupAnvil() +setupDependencyInjection() android { namespace = "io.element.android.services.appnavstate.impl" diff --git a/services/toolbox/impl/build.gradle.kts b/services/toolbox/impl/build.gradle.kts index d99efee5c0..ffc95448eb 100644 --- a/services/toolbox/impl/build.gradle.kts +++ b/services/toolbox/impl/build.gradle.kts @@ -1,4 +1,4 @@ -import extension.setupAnvil +import extension.setupDependencyInjection /* * Copyright 2023, 2024 New Vector Ltd. @@ -14,7 +14,7 @@ android { namespace = "io.element.android.services.toolbox.impl" } -setupAnvil() +setupDependencyInjection() dependencies { implementation(libs.dagger) From f23a493d4cd2bc0cb4eb94ecaad96300aa6937b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 25 Aug 2025 09:17:34 +0200 Subject: [PATCH 05/13] Fix module still using dagger annotation --- .../android/libraries/featureflag/impl/di/FeatureFlagModule.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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/FeatureFlagModule.kt index b7def966f1..137d2d3ab1 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/FeatureFlagModule.kt @@ -7,10 +7,10 @@ package io.element.android.libraries.featureflag.impl.di -import dagger.multibindings.ElementsIntoSet import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.BindingContainer import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.ElementsIntoSet import dev.zacsweers.metro.Provides import io.element.android.libraries.featureflag.impl.FeatureFlagProvider import io.element.android.libraries.featureflag.impl.PreferencesFeatureFlagProvider From dca1c5b516d6d44e2a9bc83bdd60249e5867e74c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 25 Aug 2025 09:21:20 +0200 Subject: [PATCH 06/13] Remove `dagger` and `anvil` dependencies, try to simplify gradle build scripts a bit --- anvilcodegen/build.gradle.kts | 2 +- .../anvilcodegen/ContributesNodeProcessor.kt | 4 ++-- app/build.gradle.kts | 2 +- build.gradle.kts | 11 +---------- features/location/impl/build.gradle.kts | 2 -- features/networkmonitor/impl/build.gradle.kts | 1 - gradle/libs.versions.toml | 13 ++----------- libraries/androidutils/build.gradle.kts | 1 - libraries/audio/impl/build.gradle.kts | 1 - libraries/cryptography/impl/build.gradle.kts | 1 - libraries/dateformatter/impl/build.gradle.kts | 1 - libraries/deeplink/impl/build.gradle.kts | 1 - libraries/featureflag/impl/build.gradle.kts | 1 - libraries/indicator/impl/build.gradle.kts | 1 - libraries/matrix/api/build.gradle.kts | 1 - libraries/matrix/impl/build.gradle.kts | 1 - libraries/mediaplayer/impl/build.gradle.kts | 1 - libraries/mediaviewer/impl/build.gradle.kts | 2 -- libraries/network/build.gradle.kts | 1 - libraries/preferences/impl/build.gradle.kts | 1 - libraries/push/impl/build.gradle.kts | 1 - libraries/pushproviders/firebase/build.gradle.kts | 1 - .../pushproviders/unifiedpush/build.gradle.kts | 1 - libraries/pushstore/impl/build.gradle.kts | 1 - libraries/session-storage/impl/build.gradle.kts | 1 - libraries/troubleshoot/impl/build.gradle.kts | 1 - libraries/voicerecorder/impl/build.gradle.kts | 1 - plugins/build.gradle.kts | 3 +-- services/analytics/noop/build.gradle.kts | 1 - .../analyticsproviders/posthog/build.gradle.kts | 1 - services/analyticsproviders/sentry/build.gradle.kts | 1 - services/apperror/impl/build.gradle.kts | 1 - services/appnavstate/impl/build.gradle.kts | 1 - services/toolbox/impl/build.gradle.kts | 1 - 34 files changed, 8 insertions(+), 57 deletions(-) diff --git a/anvilcodegen/build.gradle.kts b/anvilcodegen/build.gradle.kts index 9c4b192ed6..ae41d04dbb 100644 --- a/anvilcodegen/build.gradle.kts +++ b/anvilcodegen/build.gradle.kts @@ -11,8 +11,8 @@ plugins { dependencies { implementation(projects.anvilannotations) - implementation(libs.anvil.compiler.utils) implementation(libs.metro.runtime) + implementation(libs.kotlin.compiler) implementation(libs.kotlinpoet) implementation(libs.ksp.plugin) implementation(libs.kotlinpoet.ksp) diff --git a/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt index dcbcfb6547..ee79656f34 100644 --- a/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt +++ b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt @@ -56,9 +56,9 @@ class ContributesNodeProcessor( if (validSymbols.isEmpty()) return invalidSymbols for (ksClass in validSymbols) { -// if (config.enableLogging) { + if (config.enableLogging) { logger.warn("Processing ${ksClass.qualifiedName?.asString()}") -// } + } generateModule(ksClass) generateFactory(ksClass) } diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 68cbb45387..14203ec711 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -36,7 +36,7 @@ plugins { alias(libs.plugins.licensee) alias(libs.plugins.kotlin.serialization) // To be able to update the firebase.xml files, uncomment and build the project - // id("com.google.gms.google-services") + // alias(libs.plugins.gms.google.services) } setupKover() diff --git a/build.gradle.kts b/build.gradle.kts index fd8403c66e..b4ebcf6268 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,24 +5,15 @@ * Please see LICENSE files in the repository root for full details. */ -buildscript { - dependencies { - classpath(libs.kotlin.gradle.plugin) - classpath(libs.gms.google.services) - } -} - // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id("io.element.android-root") + alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.compose.compiler) apply false alias(libs.plugins.ksp) apply false - alias(libs.plugins.anvil) apply false - alias(libs.plugins.kotlin.jvm) apply false - alias(libs.plugins.kapt) apply false alias(libs.plugins.dependencycheck) apply false alias(libs.plugins.dependencyanalysis) alias(libs.plugins.detekt) diff --git a/features/location/impl/build.gradle.kts b/features/location/impl/build.gradle.kts index 93b0ef039f..577132baca 100644 --- a/features/location/impl/build.gradle.kts +++ b/features/location/impl/build.gradle.kts @@ -37,8 +37,6 @@ dependencies { implementation(projects.services.analytics.api) implementation(libs.accompanist.permission) implementation(projects.libraries.uiStrings) - implementation(libs.dagger) - testImplementation(libs.test.junit) testImplementation(libs.coroutines.test) testImplementation(libs.molecule.runtime) diff --git a/features/networkmonitor/impl/build.gradle.kts b/features/networkmonitor/impl/build.gradle.kts index 7efe1bb118..1c070e66df 100644 --- a/features/networkmonitor/impl/build.gradle.kts +++ b/features/networkmonitor/impl/build.gradle.kts @@ -19,7 +19,6 @@ android { dependencies { implementation(libs.coroutines.core) - implementation(libs.dagger) implementation(projects.libraries.core) implementation(projects.libraries.di) api(projects.features.networkmonitor.api) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 21fe4cb63f..92ff5c895e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -50,8 +50,6 @@ haze = "1.6.10" dependencyAnalysis = "2.19.0" # DI -dagger = "2.57.1" -anvil = "0.4.1" metro = "0.6.3" # Auto service @@ -67,14 +65,13 @@ android_gradle_plugin = { module = "com.android.tools.build:gradle", version.ref compose_compiler_plugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } # https://developer.android.com/studio/write/java8-support#library-desugaring-versions android_desugar = "com.android.tools:desugar_jdk_libs:2.1.5" -anvil_gradle_plugin = { module = "dev.zacsweers.anvil:gradle-plugin", version.ref = "anvil" } kotlin_gradle_plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } metro_gradle_plugin = { module = "dev.zacsweers.metro:gradle-plugin", version.ref = "metro" } +kotlin_compiler = { module = "org.jetbrains.kotlin:kotlin-compiler", version.ref = "kotlin" } kotlinpoet = { module = "com.squareup:kotlinpoet", version.ref = "kotlinpoet" } kotlinpoet-ksp = { module = "com.squareup:kotlinpoet-ksp", version.ref = "kotlinpoet" } kover_gradle_plugin = { module = "org.jetbrains.kotlinx:kover-gradle-plugin", version.ref = "kover" } ksp_gradle_plugin = { module = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" } -gms_google_services = "com.google.gms:google-services:4.4.3" # https://firebase.google.com/docs/android/setup#available-libraries google_firebase_bom = "com.google.firebase:firebase-bom:34.2.0" firebase_appdistribution_gradle = { module = "com.google.firebase:firebase-appdistribution-gradle", version.ref = "firebaseAppDistribution" } @@ -211,12 +208,7 @@ sigpwned_emoji4j = "com.sigpwned:emoji4j-core:16.0.0" # Di inject = "javax.inject:javax.inject:1" -dagger = { module = "com.google.dagger:dagger", version.ref = "dagger" } -dagger_compiler = { module = "com.google.dagger:dagger-compiler", version.ref = "dagger" } metro_runtime = { module = "dev.zacsweers.metro:runtime", version.ref = "metro" } -metro_compiler = { module = "dev.zacsweers.metro:compiler", version.ref = "metro" } -anvil_compiler_api = { module = "dev.zacsweers.anvil:compiler-api", version.ref = "anvil" } -anvil_compiler_utils = { module = "dev.zacsweers.anvil:compiler-utils", version.ref = "anvil" } # Element Call element_call_embedded = "io.element.android:element-call-embedded:0.15.0" @@ -236,9 +228,7 @@ android_library = { id = "com.android.library", version.ref = "android_gradle_pl kotlin_android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin_jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin_serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } -kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } -anvil = { id = "dev.zacsweers.anvil", version.ref = "anvil" } metro = { id = "dev.zacsweers.metro", version.ref = "metro" } detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } ktlint = "org.jlleitschuh.gradle.ktlint:13.1.0" @@ -252,3 +242,4 @@ knit = { id = "org.jetbrains.kotlinx.knit", version = "0.5.0" } sonarqube = "org.sonarqube:6.3.1.5724" licensee = "app.cash.licensee:1.13.0" compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +gms_google_services = { id = "com.google.gms.google-services", version = "4.4.3" } diff --git a/libraries/androidutils/build.gradle.kts b/libraries/androidutils/build.gradle.kts index c3ddda519b..d35fc0c4bd 100644 --- a/libraries/androidutils/build.gradle.kts +++ b/libraries/androidutils/build.gradle.kts @@ -25,7 +25,6 @@ dependencies { implementation(projects.libraries.core) implementation(projects.services.toolbox.api) - implementation(libs.dagger) implementation(libs.timber) implementation(libs.androidx.corektx) implementation(libs.androidx.activity.activity) diff --git a/libraries/audio/impl/build.gradle.kts b/libraries/audio/impl/build.gradle.kts index 1138223752..f2d9157f96 100644 --- a/libraries/audio/impl/build.gradle.kts +++ b/libraries/audio/impl/build.gradle.kts @@ -20,6 +20,5 @@ dependencies { api(projects.libraries.audio.api) implementation(libs.androidx.corektx) - implementation(libs.dagger) implementation(projects.libraries.di) } diff --git a/libraries/cryptography/impl/build.gradle.kts b/libraries/cryptography/impl/build.gradle.kts index 6e517d5401..f15c070585 100644 --- a/libraries/cryptography/impl/build.gradle.kts +++ b/libraries/cryptography/impl/build.gradle.kts @@ -18,7 +18,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(projects.libraries.di) api(projects.libraries.cryptography.api) diff --git a/libraries/dateformatter/impl/build.gradle.kts b/libraries/dateformatter/impl/build.gradle.kts index 770b9a7047..69e311ac8e 100644 --- a/libraries/dateformatter/impl/build.gradle.kts +++ b/libraries/dateformatter/impl/build.gradle.kts @@ -31,7 +31,6 @@ android { } dependencies { - implementation(libs.dagger) implementation(projects.libraries.core) implementation(projects.libraries.designsystem) implementation(projects.libraries.di) diff --git a/libraries/deeplink/impl/build.gradle.kts b/libraries/deeplink/impl/build.gradle.kts index 70bbca2336..8c652037c5 100644 --- a/libraries/deeplink/impl/build.gradle.kts +++ b/libraries/deeplink/impl/build.gradle.kts @@ -20,7 +20,6 @@ setupDependencyInjection() dependencies { api(projects.libraries.deeplink.api) implementation(projects.libraries.di) - implementation(libs.dagger) implementation(libs.androidx.corektx) implementation(projects.libraries.core) implementation(projects.libraries.matrix.api) diff --git a/libraries/featureflag/impl/build.gradle.kts b/libraries/featureflag/impl/build.gradle.kts index 4cfdb546fa..5886e01c94 100644 --- a/libraries/featureflag/impl/build.gradle.kts +++ b/libraries/featureflag/impl/build.gradle.kts @@ -20,7 +20,6 @@ setupDependencyInjection() dependencies { api(projects.libraries.featureflag.api) - implementation(libs.dagger) implementation(libs.androidx.datastore.preferences) implementation(projects.appconfig) implementation(projects.libraries.di) diff --git a/libraries/indicator/impl/build.gradle.kts b/libraries/indicator/impl/build.gradle.kts index 1a5e2d560e..9a75cbee26 100644 --- a/libraries/indicator/impl/build.gradle.kts +++ b/libraries/indicator/impl/build.gradle.kts @@ -18,7 +18,6 @@ android { } dependencies { - implementation(libs.dagger) implementation(projects.libraries.di) implementation(projects.libraries.featureflag.api) implementation(projects.libraries.matrix.api) diff --git a/libraries/matrix/api/build.gradle.kts b/libraries/matrix/api/build.gradle.kts index 09f22f97cf..4f006a7c81 100644 --- a/libraries/matrix/api/build.gradle.kts +++ b/libraries/matrix/api/build.gradle.kts @@ -43,7 +43,6 @@ android { dependencies { implementation(projects.libraries.di) - implementation(libs.dagger) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) implementation(projects.services.analytics.api) diff --git a/libraries/matrix/impl/build.gradle.kts b/libraries/matrix/impl/build.gradle.kts index c5f444b049..a0fa346be2 100644 --- a/libraries/matrix/impl/build.gradle.kts +++ b/libraries/matrix/impl/build.gradle.kts @@ -35,7 +35,6 @@ dependencies { implementation(projects.services.analytics.api) implementation(projects.services.toolbox.api) api(projects.libraries.matrix.api) - implementation(libs.dagger) implementation(projects.libraries.core) implementation("net.java.dev.jna:jna:5.17.0@aar") implementation(libs.androidx.datastore.preferences) diff --git a/libraries/mediaplayer/impl/build.gradle.kts b/libraries/mediaplayer/impl/build.gradle.kts index 0a0dcf5fe0..beaeb84dc7 100644 --- a/libraries/mediaplayer/impl/build.gradle.kts +++ b/libraries/mediaplayer/impl/build.gradle.kts @@ -20,7 +20,6 @@ dependencies { api(projects.libraries.mediaplayer.api) implementation(libs.androidx.media3.exoplayer) - implementation(libs.dagger) implementation(projects.libraries.audio.api) implementation(projects.libraries.core) implementation(projects.libraries.di) diff --git a/libraries/mediaviewer/impl/build.gradle.kts b/libraries/mediaviewer/impl/build.gradle.kts index 8221c6b77e..c47ace5334 100644 --- a/libraries/mediaviewer/impl/build.gradle.kts +++ b/libraries/mediaviewer/impl/build.gradle.kts @@ -24,8 +24,6 @@ setupDependencyInjection() dependencies { implementation(libs.coroutines.core) - implementation(libs.dagger) - implementation(libs.coil.compose) implementation(libs.androidx.media3.exoplayer) implementation(libs.androidx.media3.ui) diff --git a/libraries/network/build.gradle.kts b/libraries/network/build.gradle.kts index 95f89f8d01..b702ff7881 100644 --- a/libraries/network/build.gradle.kts +++ b/libraries/network/build.gradle.kts @@ -23,7 +23,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(projects.libraries.core) implementation(projects.libraries.di) implementation(projects.libraries.matrix.api) diff --git a/libraries/preferences/impl/build.gradle.kts b/libraries/preferences/impl/build.gradle.kts index 3a21ca5cb9..f63c057183 100644 --- a/libraries/preferences/impl/build.gradle.kts +++ b/libraries/preferences/impl/build.gradle.kts @@ -19,7 +19,6 @@ setupDependencyInjection() dependencies { api(projects.libraries.preferences.api) - implementation(libs.dagger) implementation(libs.androidx.datastore.preferences) implementation(projects.libraries.androidutils) implementation(projects.libraries.di) diff --git a/libraries/push/impl/build.gradle.kts b/libraries/push/impl/build.gradle.kts index 4a3da20370..b64c8ebeab 100644 --- a/libraries/push/impl/build.gradle.kts +++ b/libraries/push/impl/build.gradle.kts @@ -25,7 +25,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(libs.androidx.corektx) implementation(libs.androidx.datastore.preferences) implementation(platform(libs.network.retrofit.bom)) diff --git a/libraries/pushproviders/firebase/build.gradle.kts b/libraries/pushproviders/firebase/build.gradle.kts index e17234b745..4cd929141e 100644 --- a/libraries/pushproviders/firebase/build.gradle.kts +++ b/libraries/pushproviders/firebase/build.gradle.kts @@ -48,7 +48,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(libs.androidx.corektx) implementation(projects.features.enterprise.api) implementation(projects.libraries.architecture) diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index f74d4f6c80..50c7f6422e 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -18,7 +18,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(projects.features.enterprise.api) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) diff --git a/libraries/pushstore/impl/build.gradle.kts b/libraries/pushstore/impl/build.gradle.kts index 8b53e6aa07..659fb2f9ea 100644 --- a/libraries/pushstore/impl/build.gradle.kts +++ b/libraries/pushstore/impl/build.gradle.kts @@ -22,7 +22,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(projects.libraries.architecture) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) diff --git a/libraries/session-storage/impl/build.gradle.kts b/libraries/session-storage/impl/build.gradle.kts index a2b2581e1b..6e9f480b42 100644 --- a/libraries/session-storage/impl/build.gradle.kts +++ b/libraries/session-storage/impl/build.gradle.kts @@ -18,7 +18,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(projects.libraries.androidutils) implementation(projects.libraries.core) implementation(projects.libraries.encryptedDb) diff --git a/libraries/troubleshoot/impl/build.gradle.kts b/libraries/troubleshoot/impl/build.gradle.kts index b82d5a5091..17514df8bf 100644 --- a/libraries/troubleshoot/impl/build.gradle.kts +++ b/libraries/troubleshoot/impl/build.gradle.kts @@ -24,7 +24,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(projects.libraries.architecture) implementation(projects.libraries.designsystem) implementation(projects.libraries.di) diff --git a/libraries/voicerecorder/impl/build.gradle.kts b/libraries/voicerecorder/impl/build.gradle.kts index 4fecdf7776..7a4ed8c294 100644 --- a/libraries/voicerecorder/impl/build.gradle.kts +++ b/libraries/voicerecorder/impl/build.gradle.kts @@ -20,7 +20,6 @@ dependencies { api(projects.libraries.voicerecorder.api) api(libs.opusencoder) - implementation(libs.dagger) implementation(projects.appconfig) implementation(projects.libraries.matrix.api) implementation(projects.libraries.core) diff --git a/plugins/build.gradle.kts b/plugins/build.gradle.kts index 2dd0933172..e40d1f5bbd 100644 --- a/plugins/build.gradle.kts +++ b/plugins/build.gradle.kts @@ -10,7 +10,7 @@ plugins { } repositories { - mavenCentral() + mavenCentral() google() } @@ -22,7 +22,6 @@ dependencies { implementation(libs.firebase.appdistribution.gradle) implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) implementation(libs.autonomousapps.dependencyanalysis.plugin) - implementation(libs.anvil.gradle.plugin) implementation(libs.metro.gradle.plugin) implementation(libs.ksp.gradle.plugin) implementation(libs.compose.compiler.plugin) diff --git a/services/analytics/noop/build.gradle.kts b/services/analytics/noop/build.gradle.kts index d17a4b7380..cd6d16d029 100644 --- a/services/analytics/noop/build.gradle.kts +++ b/services/analytics/noop/build.gradle.kts @@ -17,7 +17,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(projects.libraries.architecture) implementation(projects.libraries.di) api(projects.services.analytics.api) diff --git a/services/analyticsproviders/posthog/build.gradle.kts b/services/analyticsproviders/posthog/build.gradle.kts index d6a03d1cb3..b364552fb1 100644 --- a/services/analyticsproviders/posthog/build.gradle.kts +++ b/services/analyticsproviders/posthog/build.gradle.kts @@ -34,7 +34,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(libs.posthog) { exclude("com.android.support", "support-annotations") } diff --git a/services/analyticsproviders/sentry/build.gradle.kts b/services/analyticsproviders/sentry/build.gradle.kts index 08912a28b7..149ffb55dd 100644 --- a/services/analyticsproviders/sentry/build.gradle.kts +++ b/services/analyticsproviders/sentry/build.gradle.kts @@ -37,7 +37,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(libs.sentry) implementation(projects.libraries.core) implementation(projects.libraries.di) diff --git a/services/apperror/impl/build.gradle.kts b/services/apperror/impl/build.gradle.kts index 1e602f3ea4..a714437788 100644 --- a/services/apperror/impl/build.gradle.kts +++ b/services/apperror/impl/build.gradle.kts @@ -18,7 +18,6 @@ android { } dependencies { - implementation(libs.dagger) implementation(projects.libraries.core) implementation(projects.libraries.di) implementation(projects.libraries.designsystem) diff --git a/services/appnavstate/impl/build.gradle.kts b/services/appnavstate/impl/build.gradle.kts index 2e82e13994..13a7cdfe1c 100644 --- a/services/appnavstate/impl/build.gradle.kts +++ b/services/appnavstate/impl/build.gradle.kts @@ -18,7 +18,6 @@ android { } dependencies { - implementation(libs.dagger) implementation(projects.libraries.core) implementation(projects.libraries.di) implementation(projects.libraries.matrix.api) diff --git a/services/toolbox/impl/build.gradle.kts b/services/toolbox/impl/build.gradle.kts index ffc95448eb..f436771591 100644 --- a/services/toolbox/impl/build.gradle.kts +++ b/services/toolbox/impl/build.gradle.kts @@ -17,7 +17,6 @@ android { setupDependencyInjection() dependencies { - implementation(libs.dagger) implementation(projects.libraries.androidutils) implementation(projects.libraries.di) api(projects.services.toolbox.api) From 298fda8bcff71b79f8ec458d4f04386977f5a9ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 25 Aug 2025 10:47:42 +0200 Subject: [PATCH 07/13] Fix push notification bindings --- app/build.gradle.kts | 1 + .../android/features/call/impl/ui/ElementCallActivity.kt | 2 +- .../features/call/impl/ui/IncomingCallActivity.kt | 2 +- .../firebase/VectorFirebaseMessagingService.kt | 2 +- .../unifiedpush/VectorUnifiedPushMessagingReceiver.kt | 4 ++-- .../VectorUnifiedPushMessagingReceiverBindings.kt | 9 +++++++-- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 14203ec711..86ddab5bb2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -289,6 +289,7 @@ dependencies { implementation(libs.serialization.json) implementation(libs.matrix.emojibase.bindings) + implementation(libs.unifiedpush) testImplementation(libs.test.junit) testImplementation(libs.test.robolectric) 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 0169029359..bf210b0a42 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 @@ -79,7 +79,7 @@ class ElementCallActivity : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - applicationContext.bindings().inject(this) + bindings().inject(this) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt index f6357e5dfb..daf0e26797 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/IncomingCallActivity.kt @@ -64,7 +64,7 @@ class IncomingCallActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - applicationContext.bindings().inject(this) + bindings().inject(this) // Set flags so it can be displayed in the lock screen @Suppress("DEPRECATION") diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt index 0b407e467c..6d13143ddc 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/VectorFirebaseMessagingService.kt @@ -29,7 +29,7 @@ class VectorFirebaseMessagingService : FirebaseMessagingService() { override fun onCreate() { super.onCreate() - applicationContext.bindings().inject(this) + bindings().inject(this) } override fun onNewToken(token: String) { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt index b28f1b406f..97ef0b27f1 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiver.kt @@ -10,8 +10,8 @@ package io.element.android.libraries.pushproviders.unifiedpush import android.content.Context import android.content.Intent import dev.zacsweers.metro.Inject +import io.element.android.libraries.architecture.bindings import io.element.android.libraries.core.log.logger.LoggerTag -import io.element.android.libraries.di.DaggerComponentOwner import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.pushproviders.api.PushHandler import io.element.android.libraries.pushproviders.unifiedpush.registration.EndpointRegistrationHandler @@ -39,7 +39,7 @@ class VectorUnifiedPushMessagingReceiver : MessagingReceiver() { @Inject lateinit var coroutineScope: CoroutineScope override fun onReceive(context: Context, intent: Intent) { - ((context.applicationContext as DaggerComponentOwner).daggerComponent as VectorUnifiedPushMessagingReceiverBindings).inject(this) + context.bindings().inject(this) super.onReceive(context, intent) } diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt index 0bd58dcca3..bbec3f272c 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/VectorUnifiedPushMessagingReceiverBindings.kt @@ -8,9 +8,14 @@ package io.element.android.libraries.pushproviders.unifiedpush import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.GraphExtension +import dev.zacsweers.metro.Binds +import dev.zacsweers.metro.ContributesTo +import org.unifiedpush.android.connector.MessagingReceiver -@GraphExtension(AppScope::class) +@ContributesTo(AppScope::class) interface VectorUnifiedPushMessagingReceiverBindings { fun inject(receiver: VectorUnifiedPushMessagingReceiver) + + @Binds + fun bindsMessagingReceiver(vectorUnifiedPushMessagingReceiver: VectorUnifiedPushMessagingReceiver): MessagingReceiver } From 36bca71a461eafee83ead6d3f9ce852dd110c877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 25 Aug 2025 11:56:42 +0200 Subject: [PATCH 08/13] Improve the fix for push notifications and `MessagingReceiver` being unknown to the DI --- app/build.gradle.kts | 1 - libraries/pushproviders/unifiedpush/build.gradle.kts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 86ddab5bb2..14203ec711 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -289,7 +289,6 @@ dependencies { implementation(libs.serialization.json) implementation(libs.matrix.emojibase.bindings) - implementation(libs.unifiedpush) testImplementation(libs.test.junit) testImplementation(libs.test.robolectric) diff --git a/libraries/pushproviders/unifiedpush/build.gradle.kts b/libraries/pushproviders/unifiedpush/build.gradle.kts index 50c7f6422e..49569e624a 100644 --- a/libraries/pushproviders/unifiedpush/build.gradle.kts +++ b/libraries/pushproviders/unifiedpush/build.gradle.kts @@ -41,7 +41,7 @@ dependencies { implementation(libs.serialization.json) // UnifiedPush library - implementation(libs.unifiedpush) + api(libs.unifiedpush) testImplementation(libs.coroutines.test) testImplementation(libs.test.junit) testImplementation(libs.test.robolectric) From 2907cef47e28ab56152c97f16fb7517acd54508a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 1 Sep 2025 16:11:10 +0200 Subject: [PATCH 09/13] Some cleanup: - Remove unnecessary `GlobalScope`. - Rename `Component` to `Graph`, `DaggerComponentOwner` to `DependencyInjectionGraphOwner`. - Rename component builders to factories, where necessary. --- .../element/android/x/ElementXApplication.kt | 11 +++-- .../kotlin/io/element/android/x/MainNode.kt | 6 +-- .../x/di/{AppComponent.kt => AppGraph.kt} | 14 +++---- .../x/di/DefaultRoomComponentFactory.kt | 4 +- ...ctory.kt => DefaultSessionGraphFactory.kt} | 10 ++--- .../io/element/android/x/di/GlobalGraph.kt | 16 -------- .../io/element/android/x/di/GlobalScope.kt | 10 ----- .../x/di/{RoomComponent.kt => RoomGraph.kt} | 4 +- .../{SessionComponent.kt => SessionGraph.kt} | 6 +-- .../appnav/LoggedInAppScopeFlowNode.kt | 10 ++--- ...onentFactory.kt => SessionGraphFactory.kt} | 2 +- .../room/joined/JoinedRoomLoadedFlowNode.kt | 6 +-- .../impl/ChangeRoomMemberRolesRootNode.kt | 6 +-- ...eLoginComponent.kt => QrCodeLoginGraph.kt} | 4 +- .../login/impl/qrcode/QrCodeLoginFlowNode.kt | 10 ++--- .../impl/di/FakeMergedQrCodeLoginComponent.kt | 40 ------------------ .../login/impl/di/FakeQrCodeLoginGraph.kt | 41 +++++++++++++++++++ .../impl/qrcode/QrCodeLoginFlowNodeTest.kt | 4 +- .../libraries/architecture/Bindings.kt | 14 +++---- ...er.kt => DependencyInjectionGraphOwner.kt} | 8 ++-- 20 files changed, 99 insertions(+), 127 deletions(-) rename app/src/main/kotlin/io/element/android/x/di/{AppComponent.kt => AppGraph.kt} (65%) rename app/src/main/kotlin/io/element/android/x/di/{DefaultSessionComponentFactory.kt => DefaultSessionGraphFactory.kt} (66%) delete mode 100644 app/src/main/kotlin/io/element/android/x/di/GlobalGraph.kt delete mode 100644 app/src/main/kotlin/io/element/android/x/di/GlobalScope.kt rename app/src/main/kotlin/io/element/android/x/di/{RoomComponent.kt => RoomGraph.kt} (92%) rename app/src/main/kotlin/io/element/android/x/di/{SessionComponent.kt => SessionGraph.kt} (78%) rename appnav/src/main/kotlin/io/element/android/appnav/di/{SessionComponentFactory.kt => SessionGraphFactory.kt} (90%) rename features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/{QrCodeLoginComponent.kt => QrCodeLoginGraph.kt} (85%) create mode 100644 features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeQrCodeLoginGraph.kt rename libraries/di/src/main/kotlin/io/element/android/libraries/di/{DaggerComponentOwner.kt => DependencyInjectionGraphOwner.kt} (55%) diff --git a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt index 7ce488056c..a075929552 100644 --- a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt +++ b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt @@ -9,17 +9,16 @@ package io.element.android.x import android.app.Application import androidx.startup.AppInitializer -import dev.zacsweers.metro.asContribution +import dev.zacsweers.metro.createGraphFactory import io.element.android.features.cachecleaner.api.CacheCleanerInitializer -import io.element.android.libraries.di.DaggerComponentOwner -import io.element.android.x.di.AppComponent -import io.element.android.x.di.globalGraph +import io.element.android.libraries.di.DependencyInjectionGraphOwner +import io.element.android.x.di.AppGraph import io.element.android.x.info.logApplicationInfo import io.element.android.x.initializer.CrashInitializer import io.element.android.x.initializer.PlatformInitializer -class ElementXApplication : Application(), DaggerComponentOwner { - override val daggerComponent: AppComponent = globalGraph.asContribution().create(this) +class ElementXApplication : Application(), DependencyInjectionGraphOwner { + override val graph: AppGraph = createGraphFactory().create(this) override fun onCreate() { super.onCreate() diff --git a/app/src/main/kotlin/io/element/android/x/MainNode.kt b/app/src/main/kotlin/io/element/android/x/MainNode.kt index e8511252d2..52668ff3a4 100644 --- a/app/src/main/kotlin/io/element/android/x/MainNode.kt +++ b/app/src/main/kotlin/io/element/android/x/MainNode.kt @@ -21,7 +21,7 @@ import com.bumble.appyx.core.node.ParentNode import com.bumble.appyx.core.plugin.Plugin import io.element.android.appnav.RootFlowNode import io.element.android.libraries.architecture.createNode -import io.element.android.libraries.di.DaggerComponentOwner +import io.element.android.libraries.di.DependencyInjectionGraphOwner import io.element.android.libraries.di.annotations.ApplicationContext import kotlinx.coroutines.launch import kotlinx.parcelize.Parcelize @@ -38,8 +38,8 @@ class MainNode( buildContext = buildContext, plugins = plugins, ), - DaggerComponentOwner { - override val daggerComponent = (context as DaggerComponentOwner).daggerComponent + DependencyInjectionGraphOwner { + override val graph = (context as DependencyInjectionGraphOwner).graph override fun resolve(navTarget: RootNavTarget, buildContext: BuildContext): Node { return createNode(buildContext = buildContext) diff --git a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt b/app/src/main/kotlin/io/element/android/x/di/AppGraph.kt similarity index 65% rename from app/src/main/kotlin/io/element/android/x/di/AppComponent.kt rename to app/src/main/kotlin/io/element/android/x/di/AppGraph.kt index e56e10f87f..195265a99c 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppGraph.kt @@ -9,22 +9,20 @@ package io.element.android.x.di import android.content.Context import dev.zacsweers.metro.AppScope -import dev.zacsweers.metro.ContributesTo -import dev.zacsweers.metro.GraphExtension +import dev.zacsweers.metro.DependencyGraph import dev.zacsweers.metro.Provides import io.element.android.libraries.architecture.NodeFactoriesBindings import io.element.android.libraries.di.annotations.ApplicationContext -@GraphExtension(AppScope::class) -interface AppComponent : NodeFactoriesBindings { - val sessionComponentFactory: SessionComponent.Factory +@DependencyGraph(AppScope::class) +interface AppGraph : NodeFactoriesBindings { + val sessionGraphFactory: SessionGraph.Factory - @ContributesTo(GlobalScope::class) - @GraphExtension.Factory + @DependencyGraph.Factory interface Factory { fun create( @ApplicationContext @Provides context: Context - ): AppComponent + ): AppGraph } } diff --git a/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt b/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt index 8198d9a0ac..8bba1dd50b 100644 --- a/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt +++ b/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt @@ -16,10 +16,10 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom @ContributesBinding(SessionScope::class) @Inject class DefaultRoomComponentFactory( - private val sessionComponent: SessionComponent, + private val sessionGraph: SessionGraph, ) : RoomComponentFactory { override fun create(room: JoinedRoom): Any { - return sessionComponent.roomComponentFactory + return sessionGraph.roomGraphFactory .create(room, room) } } diff --git a/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt b/app/src/main/kotlin/io/element/android/x/di/DefaultSessionGraphFactory.kt similarity index 66% rename from app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt rename to app/src/main/kotlin/io/element/android/x/di/DefaultSessionGraphFactory.kt index 9eb2df16b4..632e4dd32d 100644 --- a/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt +++ b/app/src/main/kotlin/io/element/android/x/di/DefaultSessionGraphFactory.kt @@ -10,15 +10,15 @@ package io.element.android.x.di import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject -import io.element.android.appnav.di.SessionComponentFactory +import io.element.android.appnav.di.SessionGraphFactory import io.element.android.libraries.matrix.api.MatrixClient @ContributesBinding(AppScope::class) @Inject -class DefaultSessionComponentFactory( - private val appComponent: AppComponent -) : SessionComponentFactory { +class DefaultSessionGraphFactory( + private val appGraph: AppGraph +) : SessionGraphFactory { override fun create(client: MatrixClient): Any { - return appComponent.sessionComponentFactory.createSessionComponent(client) + return appGraph.sessionGraphFactory.create(client) } } diff --git a/app/src/main/kotlin/io/element/android/x/di/GlobalGraph.kt b/app/src/main/kotlin/io/element/android/x/di/GlobalGraph.kt deleted file mode 100644 index 81d38f72f4..0000000000 --- a/app/src/main/kotlin/io/element/android/x/di/GlobalGraph.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2025 New Vector 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.x.di - -import dev.zacsweers.metro.DependencyGraph -import dev.zacsweers.metro.createGraph - -@DependencyGraph(GlobalScope::class) -interface GlobalGraph - -internal val globalGraph = createGraph() diff --git a/app/src/main/kotlin/io/element/android/x/di/GlobalScope.kt b/app/src/main/kotlin/io/element/android/x/di/GlobalScope.kt deleted file mode 100644 index 4340f501fd..0000000000 --- a/app/src/main/kotlin/io/element/android/x/di/GlobalScope.kt +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2025 New Vector 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.x.di - -class GlobalScope private constructor() diff --git a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt b/app/src/main/kotlin/io/element/android/x/di/RoomGraph.kt similarity index 92% rename from app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt rename to app/src/main/kotlin/io/element/android/x/di/RoomGraph.kt index eb23e5c714..e452bc2a9f 100644 --- a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt +++ b/app/src/main/kotlin/io/element/android/x/di/RoomGraph.kt @@ -17,13 +17,13 @@ import io.element.android.libraries.matrix.api.room.BaseRoom import io.element.android.libraries.matrix.api.room.JoinedRoom @GraphExtension(RoomScope::class) -interface RoomComponent : NodeFactoriesBindings { +interface RoomGraph : NodeFactoriesBindings { @ContributesTo(SessionScope::class) @GraphExtension.Factory interface Factory { fun create( @Provides joinedRoom: JoinedRoom, @Provides baseRoom: BaseRoom - ): RoomComponent + ): RoomGraph } } diff --git a/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt b/app/src/main/kotlin/io/element/android/x/di/SessionGraph.kt similarity index 78% rename from app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt rename to app/src/main/kotlin/io/element/android/x/di/SessionGraph.kt index 1c3b89f42f..255c6c7ab9 100644 --- a/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt +++ b/app/src/main/kotlin/io/element/android/x/di/SessionGraph.kt @@ -16,12 +16,12 @@ import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.MatrixClient @GraphExtension(SessionScope::class) -interface SessionComponent : NodeFactoriesBindings { - val roomComponentFactory: RoomComponent.Factory +interface SessionGraph : NodeFactoriesBindings { + val roomGraphFactory: RoomGraph.Factory @ContributesTo(AppScope::class) @GraphExtension.Factory interface Factory { - fun createSessionComponent(@Provides matrixClient: MatrixClient): SessionComponent + fun create(@Provides matrixClient: MatrixClient): SessionGraph } } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt index 7b5f85f521..5ce1a4558d 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/LoggedInAppScopeFlowNode.kt @@ -26,11 +26,11 @@ import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode -import io.element.android.appnav.di.SessionComponentFactory +import io.element.android.appnav.di.SessionGraphFactory import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.DaggerComponentOwner +import io.element.android.libraries.di.DependencyInjectionGraphOwner import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.ui.media.ImageLoaderHolder import kotlinx.parcelize.Parcelize @@ -45,7 +45,7 @@ import kotlinx.parcelize.Parcelize class LoggedInAppScopeFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, - sessionComponentFactory: SessionComponentFactory, + sessionGraphFactory: SessionGraphFactory, private val imageLoaderHolder: ImageLoaderHolder, ) : ParentNode( navModel = PermanentNavModel( @@ -54,7 +54,7 @@ class LoggedInAppScopeFlowNode( ), buildContext = buildContext, plugins = plugins -), DaggerComponentOwner { +), DependencyInjectionGraphOwner { interface Callback : Plugin { fun onOpenBugReport() } @@ -67,7 +67,7 @@ class LoggedInAppScopeFlowNode( ) : NodeInputs private val inputs: Inputs = inputs() - override val daggerComponent = sessionComponentFactory.create(inputs.matrixClient) + override val graph = sessionGraphFactory.create(inputs.matrixClient) override fun onBuilt() { super.onBuilt() diff --git a/appnav/src/main/kotlin/io/element/android/appnav/di/SessionComponentFactory.kt b/appnav/src/main/kotlin/io/element/android/appnav/di/SessionGraphFactory.kt similarity index 90% rename from appnav/src/main/kotlin/io/element/android/appnav/di/SessionComponentFactory.kt rename to appnav/src/main/kotlin/io/element/android/appnav/di/SessionGraphFactory.kt index 8800043b28..788a1633df 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/di/SessionComponentFactory.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/di/SessionGraphFactory.kt @@ -9,6 +9,6 @@ package io.element.android.appnav.di import io.element.android.libraries.matrix.api.MatrixClient -interface SessionComponentFactory { +interface SessionGraphFactory { fun create(client: MatrixClient): Any } diff --git a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt index 49d9d79a0e..e2726570d8 100644 --- a/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt +++ b/appnav/src/main/kotlin/io/element/android/appnav/room/joined/JoinedRoomLoadedFlowNode.kt @@ -28,7 +28,7 @@ import io.element.android.libraries.architecture.BackstackView import io.element.android.libraries.architecture.BaseFlowNode import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.DaggerComponentOwner +import io.element.android.libraries.di.DependencyInjectionGraphOwner import io.element.android.libraries.di.SessionScope import io.element.android.libraries.di.annotations.SessionCoroutineScope import io.element.android.libraries.matrix.api.MatrixClient @@ -68,7 +68,7 @@ class JoinedRoomLoadedFlowNode( ), buildContext = buildContext, plugins = plugins, -), DaggerComponentOwner { +), DependencyInjectionGraphOwner { interface Callback : Plugin { fun onOpenRoom(roomId: RoomId, serverNames: List) fun onPermalinkClick(data: PermalinkData, pushToBackstack: Boolean) @@ -83,7 +83,7 @@ class JoinedRoomLoadedFlowNode( private val inputs: Inputs = inputs() private val callbacks = plugins.filterIsInstance() - override val daggerComponent = roomComponentFactory.create(inputs.room) + override val graph = roomComponentFactory.create(inputs.room) init { lifecycle.subscribe( diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRoomMemberRolesRootNode.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRoomMemberRolesRootNode.kt index 257558359a..21ea83a782 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRoomMemberRolesRootNode.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/ChangeRoomMemberRolesRootNode.kt @@ -25,7 +25,7 @@ import io.element.android.features.changeroommemberroes.api.ChangeRoomMemberRole import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.createNode import io.element.android.libraries.architecture.inputs -import io.element.android.libraries.di.DaggerComponentOwner +import io.element.android.libraries.di.DependencyInjectionGraphOwner import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.JoinedRoom @@ -44,7 +44,7 @@ class ChangeRoomMemberRolesRootNode( ), buildContext = buildContext, plugins = plugins, -), DaggerComponentOwner, ChangeRoomMemberRolesEntryPoint.NodeProxy { +), DependencyInjectionGraphOwner, ChangeRoomMemberRolesEntryPoint.NodeProxy { sealed interface NavTarget : Parcelable { @Parcelize object Root : NavTarget @@ -57,7 +57,7 @@ class ChangeRoomMemberRolesRootNode( private val inputs = inputs() - override val daggerComponent = roomComponentFactory.create(inputs.joinedRoom) + override val graph = roomComponentFactory.create(inputs.joinedRoom) override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { return when (navTarget) { diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginGraph.kt similarity index 85% rename from features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt rename to features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginGraph.kt index e3d8ad0317..12400f97ec 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginComponent.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/di/QrCodeLoginGraph.kt @@ -13,10 +13,10 @@ import dev.zacsweers.metro.GraphExtension import io.element.android.libraries.architecture.NodeFactoriesBindings @GraphExtension(QrCodeLoginScope::class) -interface QrCodeLoginComponent : NodeFactoriesBindings { +interface QrCodeLoginGraph : NodeFactoriesBindings { @ContributesTo(AppScope::class) @GraphExtension.Factory interface Factory { - fun create(): QrCodeLoginComponent + fun create(): QrCodeLoginGraph } } diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt index 01a11ac638..b5e6dcdebf 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNode.kt @@ -26,7 +26,7 @@ import dev.zacsweers.metro.Assisted import dev.zacsweers.metro.Inject import io.element.android.anvilannotations.ContributesNode import io.element.android.features.login.impl.di.QrCodeLoginBindings -import io.element.android.features.login.impl.di.QrCodeLoginComponent +import io.element.android.features.login.impl.di.QrCodeLoginGraph import io.element.android.features.login.impl.screens.qrcode.confirmation.QrCodeConfirmationNode import io.element.android.features.login.impl.screens.qrcode.confirmation.QrCodeConfirmationStep import io.element.android.features.login.impl.screens.qrcode.error.QrCodeErrorNode @@ -38,7 +38,7 @@ import io.element.android.libraries.architecture.NodeInputs import io.element.android.libraries.architecture.bindings import io.element.android.libraries.architecture.createNode import io.element.android.libraries.core.coroutine.CoroutineDispatchers -import io.element.android.libraries.di.DaggerComponentOwner +import io.element.android.libraries.di.DependencyInjectionGraphOwner import io.element.android.libraries.matrix.api.auth.qrlogin.MatrixQrCodeLoginData import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep import io.element.android.libraries.matrix.api.auth.qrlogin.QrLoginException @@ -53,7 +53,7 @@ import timber.log.Timber class QrCodeLoginFlowNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, - qrCodeLoginComponentBuilder: QrCodeLoginComponent.Factory, + qrCodeLoginGraphFactory: QrCodeLoginGraph.Factory, private val coroutineDispatchers: CoroutineDispatchers, ) : BaseFlowNode( backstack = BackStack( @@ -62,10 +62,10 @@ class QrCodeLoginFlowNode( ), buildContext = buildContext, plugins = plugins, -), DaggerComponentOwner { +), DependencyInjectionGraphOwner { private var authenticationJob: Job? = null - override val daggerComponent = qrCodeLoginComponentBuilder.create() + override val graph = qrCodeLoginGraphFactory.create() private val qrCodeLoginManager by lazy { bindings().qrCodeLoginManager() } sealed interface NavTarget : Parcelable { diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt index e9ebee2f5b..e69de29bb2 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt @@ -1,40 +0,0 @@ -/* - * Copyright 2024 New Vector 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.login.impl.di - -import com.bumble.appyx.core.modality.BuildContext -import com.bumble.appyx.core.node.Node -import com.bumble.appyx.core.plugin.Plugin -import io.element.android.features.login.impl.qrcode.FakeQrCodeLoginManager -import io.element.android.features.login.impl.qrcode.QrCodeLoginFlowNode -import io.element.android.features.login.impl.qrcode.QrCodeLoginManager -import io.element.android.libraries.architecture.AssistedNodeFactory -import io.element.android.libraries.architecture.createNode - -internal class FakeMergedQrCodeLoginComponent(private val qrCodeLoginManager: QrCodeLoginManager) : - MergedQrCodeLoginComponent { - // Ignore this error, it does override a method once code generation is done - override fun qrCodeLoginManager(): QrCodeLoginManager = qrCodeLoginManager - - class Builder(private val qrCodeLoginManager: QrCodeLoginManager = FakeQrCodeLoginManager()) : - QrCodeLoginComponent.Factory { - override fun create(): QrCodeLoginComponent { - return FakeMergedQrCodeLoginComponent(qrCodeLoginManager) - } - } - - override fun nodeFactories(): Map, AssistedNodeFactory<*>> { - return mapOf( - QrCodeLoginFlowNode::class.java to object : AssistedNodeFactory { - override fun create(buildContext: BuildContext, plugins: List): QrCodeLoginFlowNode { - return createNode(buildContext, plugins) - } - } - ) - } -} diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeQrCodeLoginGraph.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeQrCodeLoginGraph.kt new file mode 100644 index 0000000000..640a103f93 --- /dev/null +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeQrCodeLoginGraph.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2024 New Vector 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.login.impl.di + +import com.bumble.appyx.core.modality.BuildContext +import com.bumble.appyx.core.node.Node +import com.bumble.appyx.core.plugin.Plugin +import io.element.android.features.login.impl.qrcode.FakeQrCodeLoginManager +import io.element.android.features.login.impl.qrcode.QrCodeLoginFlowNode +import io.element.android.features.login.impl.qrcode.QrCodeLoginManager +import io.element.android.libraries.architecture.AssistedNodeFactory +import io.element.android.libraries.architecture.createNode + +internal class FakeQrCodeLoginGraph( + private val qrCodeLoginManager: QrCodeLoginManager, +) : QrCodeLoginGraph, QrCodeLoginBindings { + override fun nodeFactories(): Map, AssistedNodeFactory<*>> { + return mapOf( + QrCodeLoginFlowNode::class to object : AssistedNodeFactory { + override fun create(buildContext: BuildContext, plugins: List): QrCodeLoginFlowNode { + return createNode(buildContext, plugins) + } + } + ) + } + + override fun qrCodeLoginManager(): QrCodeLoginManager = qrCodeLoginManager + + internal class Builder( + private val qrCodeLoginManager: QrCodeLoginManager, + ) : QrCodeLoginComponent.Factory { + override fun create(): QrCodeLoginComponent { + return FakeQrCodeLoginComponent(qrCodeLoginManager) + } + } +} diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNodeTest.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNodeTest.kt index c90a2d16b3..da2cc8a139 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNodeTest.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/qrcode/QrCodeLoginFlowNodeTest.kt @@ -12,7 +12,7 @@ import com.bumble.appyx.core.modality.AncestryInfo import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.utils.customisations.NodeCustomisationDirectoryImpl import com.google.common.truth.Truth.assertThat -import io.element.android.features.login.impl.di.FakeMergedQrCodeLoginComponent +import io.element.android.features.login.impl.di.FakeQrCodeLoginGraph import io.element.android.features.login.impl.screens.qrcode.confirmation.QrCodeConfirmationStep import io.element.android.libraries.core.coroutine.CoroutineDispatchers import io.element.android.libraries.matrix.api.auth.qrlogin.QrCodeLoginStep @@ -183,7 +183,7 @@ class QrCodeLoginFlowNodeTest { return QrCodeLoginFlowNode( buildContext = buildContext, plugins = emptyList(), - qrCodeLoginComponentBuilder = FakeMergedQrCodeLoginComponent.Builder(qrCodeLoginManager), + qrCodeLoginGraphFactory = FakeQrCodeLoginGraph.Builder(qrCodeLoginManager), coroutineDispatchers = coroutineDispatchers, ) } diff --git a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Bindings.kt b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Bindings.kt index 0c922729fc..12fa4c8bd9 100644 --- a/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Bindings.kt +++ b/libraries/architecture/src/main/kotlin/io/element/android/libraries/architecture/Bindings.kt @@ -10,7 +10,7 @@ package io.element.android.libraries.architecture import android.content.Context import android.content.ContextWrapper import com.bumble.appyx.core.node.Node -import io.element.android.libraries.di.DaggerComponentOwner +import io.element.android.libraries.di.DependencyInjectionGraphOwner inline fun Node.optionalBindings() = optionalBindings(T::class.java) inline fun Node.bindings() = bindings(T::class.java) @@ -20,9 +20,9 @@ fun Context.bindings(klass: Class): T { // search dagger components in the context hierarchy return generateSequence(this) { (it as? ContextWrapper)?.baseContext } .plus(applicationContext) - .filterIsInstance() - .map { it.daggerComponent } - .flatMap { if (it is Collection<*>) it else listOf(it) } + .filterIsInstance() + .map { it.graph } + .flatMap { it as? Collection<*> ?: listOf(it) } .filterIsInstance(klass) .firstOrNull() ?: error("Unable to find bindings for ${klass.name}") @@ -31,9 +31,9 @@ fun Context.bindings(klass: Class): T { fun Node.optionalBindings(klass: Class): T? { // search dagger components in node hierarchy return generateSequence(this, Node::parent) - .filterIsInstance() - .map { it.daggerComponent } - .flatMap { if (it is Collection<*>) it else listOf(it) } + .filterIsInstance() + .map { it.graph } + .flatMap { it as? Collection<*> ?: listOf(it) } .filterIsInstance(klass) .firstOrNull() } diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/DaggerComponentOwner.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/DependencyInjectionGraphOwner.kt similarity index 55% rename from libraries/di/src/main/kotlin/io/element/android/libraries/di/DaggerComponentOwner.kt rename to libraries/di/src/main/kotlin/io/element/android/libraries/di/DependencyInjectionGraphOwner.kt index 0d7a398a6e..f1466d924f 100644 --- a/libraries/di/src/main/kotlin/io/element/android/libraries/di/DaggerComponentOwner.kt +++ b/libraries/di/src/main/kotlin/io/element/android/libraries/di/DependencyInjectionGraphOwner.kt @@ -8,10 +8,10 @@ package io.element.android.libraries.di /** - * A [DaggerComponentOwner] is anything that "owns" a Dagger Component. + * A [DependencyInjectionGraphOwner] is anything that "owns" a DI Graph. * */ -interface DaggerComponentOwner { - /** This is either a component, or a list of components. */ - val daggerComponent: Any +interface DependencyInjectionGraphOwner { + /** This is either a graph, or a list of graphs. */ + val graph: Any } From 2fd9eaf17f291a3010f595ba8c3116d25a187ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 1 Sep 2025 16:14:49 +0200 Subject: [PATCH 10/13] Upgrade Metro to `v0.6.4` --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 92ff5c895e..9dd7aa02f3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -50,7 +50,7 @@ haze = "1.6.10" dependencyAnalysis = "2.19.0" # DI -metro = "0.6.3" +metro = "0.6.4" # Auto service autoservice = "1.1.1" From 8f09fd62d9c20441145ca9adf637995bd73acf0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Mon, 1 Sep 2025 17:11:38 +0200 Subject: [PATCH 11/13] Fixes after rebase --- .../android/x/intent/DefaultIntentProvider.kt | 2 +- .../impl/DefaultAnalyticsEntryPoint.kt | 2 +- .../call/impl/ui/LanguageTagProvider.kt | 2 +- .../call/impl/utils/CallIntentDataParser.kt | 2 +- .../DefaultCallAnalyticCredentialsProvider.kt | 2 +- .../impl/utils/DefaultCurrentCallService.kt | 2 +- .../DefaultChangeRoomMemberRolesEntyPoint.kt | 2 +- .../impl/DefaultCreateRoomEntryPoint.kt | 2 +- .../DefaultAccountDeactivationEntryPoint.kt | 2 +- .../impl/DefaultEnterpriseService.kt | 2 +- .../impl/DefaultSessionEnterpriseService.kt | 2 +- .../ftue/impl/DefaultFtueEntryPoint.kt | 2 +- .../home/impl/DefaultHomeEntryPoint.kt | 2 +- .../DefaultFilterSelectionStrategy.kt | 2 +- .../DefaultAcceptDeclineInviteView.kt | 2 +- .../declineandblock/DeclineAndBlockNode.kt | 16 +- .../DefaultDeclineAndBlockEntryPoint.kt | 2 +- .../impl/DefaultInvitePeopleRenderer.kt | 2 +- .../impl/DefaultJoinRoomEntryPoint.kt | 2 +- .../DefaultKnockRequestsListEntryPoint.kt | 2 +- .../impl/InternalLeaveRoomRenderer.kt | 2 +- .../DefaultOpenSourcesLicensesEntryPoint.kt | 2 +- .../location/impl/DefaultLocationService.kt | 2 +- .../send/DefaultSendLocationEntryPoint.kt | 2 +- .../show/DefaultShowLocationEntryPoint.kt | 2 +- .../impl/DefaultLockScreenEntryPoint.kt | 2 +- .../login/impl/DefaultLoginEntryPoint.kt | 2 +- .../login/impl/DefaultLoginIntentResolver.kt | 2 +- .../login/impl/DefaultLoginUserStory.kt | 0 .../loginpassword/LoginPasswordPresenter.kt | 1 - .../onboarding/OnBoardingLogoResIdProvider.kt | 11 +- .../impl/di/FakeMergedQrCodeLoginComponent.kt | 0 .../login/impl/di/FakeQrCodeLoginGraph.kt | 11 +- .../logout/impl/DefaultLogoutEntryPoint.kt | 2 +- .../impl/direct/DefaultDirectLogoutView.kt | 2 +- .../impl/draft/VolatileComposerDraftStore.kt | 2 +- .../messages/impl/link/LinkChecker.kt | 2 +- .../DefaultMessageComposerContext.kt | 2 +- .../RichTextEditorStateFactory.kt | 2 +- .../suggestions/SuggestionsProcessor.kt | 2 +- .../impl/timeline/TimelineItemIndexer.kt | 2 +- .../ReadReceiptBottomSheetPresenter.kt | 2 +- ...eItemContentFailedToParseMessageFactory.kt | 2 +- ...ineItemContentFailedToParseStateFactory.kt | 2 +- .../TimelineItemContentRedactedFactory.kt | 2 +- .../event/TimelineItemContentUTDFactory.kt | 2 +- .../timeline/groups/TimelineItemGrouper.kt | 2 +- .../create/DefaultCreatePollEntryPoint.kt | 2 +- .../history/DefaultPollHistoryEntryPoint.kt | 2 +- .../preferences/impl/DefaultCacheService.kt | 2 +- .../impl/DefaultPreferencesEntryPoint.kt | 2 +- .../preferences/impl/about/AboutPresenter.kt | 2 +- .../bugreport/DefaultBugReportEntryPoint.kt | 2 +- .../rageshake/impl/di/RageshakeBindings.kt | 4 +- .../impl/reporter/BugReportAppNameProvider.kt | 2 +- .../impl/DefaultReportRoomEntryPoint.kt | 2 +- .../DefaultRoomAliasResolverEntryPoint.kt | 2 +- .../impl/DefaultRoomDetailsEntryPoint.kt | 2 +- .../impl/DefaultRoomDirectoryEntryPoint.kt | 2 +- .../DefaultRoomMemberModerationRenderer.kt | 2 +- .../impl/DefaultSecureBackupEntryPoint.kt | 2 +- .../setup/SecureBackupSetupStateMachine.kt | 2 +- .../impl/tools/RecoveryKeyTools.kt | 2 +- .../share/impl/DefaultShareEntryPoint.kt | 2 +- .../impl/DefaultSignedOutEntryPoint.kt | 2 +- .../impl/DefaultStartChatEntryPoint.kt | 2 +- .../impl/userlist/UserListDataStore.kt | 2 +- .../impl/DefaultUserProfileEntryPoint.kt | 2 +- .../DefaultIncomingVerificationEntryPoint.kt | 2 +- .../DefaultOutgoingVerificationEntryPoint.kt | 2 +- .../impl/outgoing/OutgoingVerificationNode.kt | 26 +- .../outgoing/OutgoingVerificationPresenter.kt | 310 ++++++++++-------- .../viewfolder/impl/DefaultTextFileViewer.kt | 2 +- .../impl/DefaultViewFolderEntryPoint.kt | 2 +- .../impl/AESEncryptionDecryptionService.kt | 2 +- .../deeplink/impl/DefaultDeepLinkCreator.kt | 3 +- .../deeplink/impl/DefaultDeeplinkParser.kt | 2 +- .../element/android/libraries/di/AppScope.kt | 10 - libraries/matrix/api/build.gradle.kts | 3 + .../libraries/matrix/api/mxc/MxcTools.kt | 2 +- .../matrix/impl/ClientBuilderProvider.kt | 2 +- .../libraries/matrix/impl/RustSdkMetadata.kt | 2 +- .../qrlogin/RustQrCodeLoginDataFactory.kt | 2 +- .../DefaultUserCertificatesProvider.kt | 2 +- .../impl/keys/DefaultPassphraseGenerator.kt | 2 +- .../permalink/DefaultMatrixToConverter.kt | 2 +- .../impl/permalink/DefaultPermalinkBuilder.kt | 2 +- .../impl/platform/RustInitPlatformService.kt | 2 +- .../room/TimelineEventTypeFilterFactory.kt | 2 +- .../impl/room/alias/DefaultRoomAliasHelper.kt | 2 +- .../ui/messages/RoomMemberProfilesCache.kt | 2 +- .../matrix/ui/messages/RoomNamesCache.kt | 2 +- .../impl/DefaultMediaGalleryEntryPoint.kt | 2 +- .../impl/DefaultMediaViewerEntryPoint.kt | 2 +- .../datasource/MediaItemsPostProcessor.kt | 2 +- .../FileExtensionExtractorWithValidation.kt | 2 +- .../impl/viewer/PagerKeysHandler.kt | 2 +- .../oidc/impl/DefaultOidcActionFlow.kt | 2 +- .../AccompanistPermissionStateProvider.kt | 2 +- .../DefaultPreferencesDataStoreFactory.kt | 2 +- .../notifications/ReplyMessageExtractor.kt | 2 +- .../troubleshoot/DiagnosticPushHandler.kt | 2 +- .../troubleshoot/NotificationClickHandler.kt | 2 +- .../firebase/FirebasePushParser.kt | 2 +- .../unifiedpush/GuardServiceStarter.kt | 2 +- .../unifiedpush/UnifiedPushParser.kt | 2 +- .../EndpointRegistrationHandler.kt | 2 +- .../DefaultPushClientSecretFactory.kt | 2 +- .../impl/DefaultRoomSelectEntryPoint.kt | 2 +- ...faultNotificationTroubleShootEntryPoint.kt | 2 +- .../history/DefaultPushHistoryEntryPoint.kt | 2 +- .../impl/audio/DBovAudioLevelCalculator.kt | 2 +- .../impl/di/VoiceRecorderModule.kt | 2 +- .../analytics/noop/NoopAnalyticsService.kt | 2 +- .../analytics/noop/NoopScreenTracker.kt | 2 +- .../sdk/DefaultBuildVersionSdkIntProvider.kt | 2 +- .../impl/systemclock/DefaultSystemClock.kt | 2 +- 117 files changed, 310 insertions(+), 295 deletions(-) delete mode 100644 features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt delete mode 100644 features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt delete mode 100644 libraries/di/src/main/kotlin/io/element/android/libraries/di/AppScope.kt diff --git a/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt b/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt index 52c7293075..746f570447 100644 --- a/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt +++ b/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt @@ -14,7 +14,7 @@ import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import io.element.android.libraries.deeplink.api.DeepLinkCreator -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.ThreadId diff --git a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt index cfc0dec548..134535e881 100644 --- a/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt +++ b/features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/DefaultAnalyticsEntryPoint.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultAnalyticsEntryPoint() : AnalyticsEntryPoint { +class DefaultAnalyticsEntryPoint : AnalyticsEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext): Node { return parentNode.createNode(buildContext) } diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt index df2dc77d02..74016fd210 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/ui/LanguageTagProvider.kt @@ -20,7 +20,7 @@ interface LanguageTagProvider { @ContributesBinding(AppScope::class) @Inject -class DefaultLanguageTagProvider() : LanguageTagProvider { +class DefaultLanguageTagProvider : LanguageTagProvider { @Composable override fun provideLanguageTag(): String? { return LocalConfiguration.current.locales.get(0)?.toLanguageTag() diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallIntentDataParser.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallIntentDataParser.kt index bf3720f88e..09fcfe3940 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallIntentDataParser.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/CallIntentDataParser.kt @@ -12,7 +12,7 @@ import androidx.core.net.toUri import dev.zacsweers.metro.Inject @Inject -class CallIntentDataParser() { +class CallIntentDataParser { private val validHttpSchemes = sequenceOf("https") private val knownHosts = sequenceOf( "call.element.io", diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt index 3cb510db60..aafb7fdde0 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCallAnalyticCredentialsProvider.kt @@ -15,7 +15,7 @@ import io.element.android.libraries.matrix.api.widget.CallAnalyticCredentialsPro @ContributesBinding(AppScope::class) @Inject -class DefaultCallAnalyticCredentialsProvider() : CallAnalyticCredentialsProvider { +class DefaultCallAnalyticCredentialsProvider : CallAnalyticCredentialsProvider { override val posthogUserId: String? = BuildConfig.POSTHOG_USER_ID.takeIf { it.isNotBlank() } override val posthogApiHost: String? = BuildConfig.POSTHOG_API_HOST.takeIf { it.isNotBlank() } override val posthogApiKey: String? = BuildConfig.POSTHOG_API_KEY.takeIf { it.isNotBlank() } diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt index 9d577f4ce9..3ae65e338b 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/DefaultCurrentCallService.kt @@ -18,7 +18,7 @@ import kotlinx.coroutines.flow.MutableStateFlow @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) @Inject -class DefaultCurrentCallService() : CurrentCallService { +class DefaultCurrentCallService : CurrentCallService { override val currentCall = MutableStateFlow(CurrentCall.None) fun onCallStarted(call: CurrentCall) { diff --git a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt index 53c3bedf7f..8a9117776d 100644 --- a/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt +++ b/features/changeroommemberroles/impl/src/main/kotlin/io/element/android/features/changeroommemberroles/impl/DefaultChangeRoomMemberRolesEntyPoint.kt @@ -19,7 +19,7 @@ import io.element.android.libraries.matrix.api.room.JoinedRoom @ContributesBinding(SessionScope::class) @Inject -class DefaultChangeRoomMemberRolesEntyPoint() : ChangeRoomMemberRolesEntryPoint { +class DefaultChangeRoomMemberRolesEntyPoint : ChangeRoomMemberRolesEntryPoint { override fun builder(parentNode: Node, buildContext: BuildContext): ChangeRoomMemberRolesEntryPoint.Builder { return object : ChangeRoomMemberRolesEntryPoint.Builder { private lateinit var changeRoomMemberRolesListType: ChangeRoomMemberRolesListType diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt index 6058a6de6f..0d62542504 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/DefaultCreateRoomEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.di.SessionScope @ContributesBinding(SessionScope::class) @Inject -class DefaultCreateRoomEntryPoint() : CreateRoomEntryPoint { +class DefaultCreateRoomEntryPoint : CreateRoomEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): CreateRoomEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt index 0db34dc9f3..0f34e18b9f 100644 --- a/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt +++ b/features/deactivation/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultAccountDeactivationEntryPoint.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultAccountDeactivationEntryPoint() : AccountDeactivationEntryPoint { +class DefaultAccountDeactivationEntryPoint : AccountDeactivationEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext): Node { return parentNode.createNode(buildContext) } diff --git a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt index d0fba5ceeb..4d52e83a8f 100644 --- a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt +++ b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultEnterpriseService.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.flow.flowOf @ContributesBinding(AppScope::class) @Inject -class DefaultEnterpriseService() : EnterpriseService { +class DefaultEnterpriseService : EnterpriseService { override val isEnterpriseBuild = false override suspend fun isEnterpriseUser(sessionId: SessionId) = false diff --git a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt index 0c515f1b97..f25c38531a 100644 --- a/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt +++ b/features/enterprise/impl-foss/src/main/kotlin/io/element/android/features/enterprise/impl/DefaultSessionEnterpriseService.kt @@ -14,7 +14,7 @@ import io.element.android.libraries.di.SessionScope @ContributesBinding(SessionScope::class) @Inject -class DefaultSessionEnterpriseService() : SessionEnterpriseService { +class DefaultSessionEnterpriseService : SessionEnterpriseService { override suspend fun init() = Unit override suspend fun isElementCallAvailable(): Boolean = true } diff --git a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt index 1f9467efbc..db3c6a9c91 100644 --- a/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt +++ b/features/ftue/impl/src/main/kotlin/io/element/android/features/ftue/impl/DefaultFtueEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultFtueEntryPoint() : FtueEntryPoint { +class DefaultFtueEntryPoint : FtueEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): FtueEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt index 2f28cb836d..272a9bc9b1 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/DefaultHomeEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultHomeEntryPoint() : HomeEntryPoint { +class DefaultHomeEntryPoint : HomeEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): HomeEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt index acde851de5..c1da8b18b2 100644 --- a/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt +++ b/features/home/impl/src/main/kotlin/io/element/android/features/home/impl/filters/selection/DefaultFilterSelectionStrategy.kt @@ -15,7 +15,7 @@ import kotlinx.coroutines.flow.MutableStateFlow @ContributesBinding(SessionScope::class) @Inject -class DefaultFilterSelectionStrategy() : FilterSelectionStrategy { +class DefaultFilterSelectionStrategy : FilterSelectionStrategy { private val selectedFilters = LinkedHashSet() override val filterSelectionStates = MutableStateFlow(buildFilters()) diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt index 4d3b26da1d..487865065d 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/acceptdecline/DefaultAcceptDeclineInviteView.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.matrix.api.core.RoomId @ContributesBinding(SessionScope::class) @Inject -class DefaultAcceptDeclineInviteView() : AcceptDeclineInviteView { +class DefaultAcceptDeclineInviteView : AcceptDeclineInviteView { @Composable override fun Render( state: AcceptDeclineInviteState, diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockNode.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockNode.kt index 7965c5f500..9d319adf1d 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockNode.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DeclineAndBlockNode.kt @@ -25,20 +25,20 @@ import io.element.android.libraries.di.SessionScope class DeclineAndBlockNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, -// presenterFactory: DeclineAndBlockPresenter.Factory, + presenterFactory: DeclineAndBlockPresenter.Factory, ) : Node(buildContext, plugins = plugins) { data class Inputs(val inviteData: InviteData) : NodeInputs private val inviteData = inputs().inviteData -// private val presenter = presenterFactory.create(inviteData) + private val presenter = presenterFactory.create(inviteData) @Composable override fun View(modifier: Modifier) { -// val state = presenter.present() -// DeclineAndBlockView( -// state = state, -// onBackClick = ::navigateUp, -// modifier = modifier -// ) + val state = presenter.present() + DeclineAndBlockView( + state = state, + onBackClick = ::navigateUp, + modifier = modifier + ) } } diff --git a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt index 217da56806..ea5456feb2 100644 --- a/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt +++ b/features/invite/impl/src/main/kotlin/io/element/android/features/invite/impl/declineandblock/DefaultDeclineAndBlockEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultDeclineAndBlockEntryPoint() : DeclineInviteAndBlockEntryPoint { +class DefaultDeclineAndBlockEntryPoint : DeclineInviteAndBlockEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext, inviteData: InviteData): Node { val inputs = DeclineAndBlockNode.Inputs(inviteData) return parentNode.createNode(buildContext, plugins = listOf(inputs)) diff --git a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt index 0e3fd11c21..3301b7ec2c 100644 --- a/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt +++ b/features/invitepeople/impl/src/main/kotlin/io/element/android/features/invitepeople/impl/DefaultInvitePeopleRenderer.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.di.SessionScope @ContributesBinding(SessionScope::class) @Inject -class DefaultInvitePeopleRenderer() : InvitePeopleRenderer { +class DefaultInvitePeopleRenderer : InvitePeopleRenderer { @Composable override fun Render(state: InvitePeopleState, modifier: Modifier) { if (state is DefaultInvitePeopleState) { diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt index 4c3802d195..5f217b26c2 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/DefaultJoinRoomEntryPoint.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultJoinRoomEntryPoint() : JoinRoomEntryPoint { +class DefaultJoinRoomEntryPoint : JoinRoomEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: JoinRoomEntryPoint.Inputs): Node { return parentNode.createNode( buildContext = buildContext, diff --git a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt index 3559a30607..675f3bee9e 100644 --- a/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt +++ b/features/knockrequests/impl/src/main/kotlin/io/element/android/features/knockrequests/impl/list/DefaultKnockRequestsListEntryPoint.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultKnockRequestsListEntryPoint() : KnockRequestsListEntryPoint { +class DefaultKnockRequestsListEntryPoint : KnockRequestsListEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext): Node { return parentNode.createNode(buildContext) } diff --git a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt index c20d2a9401..be1aa3b55a 100644 --- a/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt +++ b/features/leaveroom/impl/src/main/kotlin/io/element/android/features/leaveroom/impl/InternalLeaveRoomRenderer.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.matrix.api.core.RoomId @ContributesBinding(SessionScope::class) @Inject -class InternalLeaveRoomRenderer() : LeaveRoomRenderer { +class InternalLeaveRoomRenderer : LeaveRoomRenderer { @Composable override fun Render(state: LeaveRoomState, onSelectNewOwners: (RoomId) -> Unit, modifier: Modifier) { if (state is InternalLeaveRoomState) { diff --git a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt index 92795494b3..425346a90e 100644 --- a/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt +++ b/features/licenses/impl/src/main/kotlin/io/element/android/features/licenses/impl/DefaultOpenSourcesLicensesEntryPoint.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultOpenSourcesLicensesEntryPoint() : OpenSourceLicensesEntryPoint { +class DefaultOpenSourcesLicensesEntryPoint : OpenSourceLicensesEntryPoint { override fun getNode(node: Node, buildContext: BuildContext): Node { return node.createNode(buildContext) } diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt index 7f682c8c3a..5be8e7c093 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/DefaultLocationService.kt @@ -15,7 +15,7 @@ import io.element.android.features.location.api.LocationService @ContributesBinding(AppScope::class) @Inject -class DefaultLocationService() : LocationService { +class DefaultLocationService : LocationService { override fun isServiceAvailable(): Boolean { return BuildConfig.MAPTILER_API_KEY.isNotEmpty() } diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt index b8ba3a1a73..c42be68bf1 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/send/DefaultSendLocationEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.matrix.api.timeline.Timeline @ContributesBinding(AppScope::class) @Inject -class DefaultSendLocationEntryPoint() : SendLocationEntryPoint { +class DefaultSendLocationEntryPoint : SendLocationEntryPoint { override fun builder(timelineMode: Timeline.Mode): SendLocationEntryPoint.Builder { return Builder(timelineMode) } diff --git a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt index 1e7d529117..d226a01ede 100644 --- a/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt +++ b/features/location/impl/src/main/kotlin/io/element/android/features/location/impl/show/DefaultShowLocationEntryPoint.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultShowLocationEntryPoint() : ShowLocationEntryPoint { +class DefaultShowLocationEntryPoint : ShowLocationEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext, inputs: ShowLocationEntryPoint.Inputs): Node { return parentNode.createNode(buildContext, listOf(inputs)) } diff --git a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt index c27483b792..1155a6fdcd 100644 --- a/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt +++ b/features/lockscreen/impl/src/main/kotlin/io/element/android/features/lockscreen/impl/DefaultLockScreenEntryPoint.kt @@ -20,7 +20,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultLockScreenEntryPoint() : LockScreenEntryPoint { +class DefaultLockScreenEntryPoint : LockScreenEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext, navTarget: LockScreenEntryPoint.Target): LockScreenEntryPoint.NodeBuilder { val callbacks = mutableListOf() diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt index 222b6e2c10..7da2bdf758 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultLoginEntryPoint() : LoginEntryPoint { +class DefaultLoginEntryPoint : LoginEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): LoginEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt index 652cd1e12c..4851a9ab7c 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginIntentResolver.kt @@ -16,7 +16,7 @@ import io.element.android.features.login.api.LoginParams @ContributesBinding(AppScope::class) @Inject -class DefaultLoginIntentResolver() : LoginIntentResolver { +class DefaultLoginIntentResolver : LoginIntentResolver { override fun parse(uriString: String): LoginParams? { val uri = uriString.toUri() if (uri.host != "mobile.element.io") return null diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/DefaultLoginUserStory.kt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt index b492c2201b..80a5711d52 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/loginpassword/LoginPasswordPresenter.kt @@ -16,7 +16,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import dev.zacsweers.metro.Inject -import io.element.android.features.login.impl.DefaultLoginUserStory import io.element.android.features.login.impl.accountprovider.AccountProviderDataSource import io.element.android.libraries.architecture.AsyncData import io.element.android.libraries.architecture.Presenter diff --git a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingLogoResIdProvider.kt b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingLogoResIdProvider.kt index 03cebff188..73ac06bbe2 100644 --- a/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingLogoResIdProvider.kt +++ b/features/login/impl/src/main/kotlin/io/element/android/features/login/impl/screens/onboarding/OnBoardingLogoResIdProvider.kt @@ -9,17 +9,18 @@ package io.element.android.features.login.impl.screens.onboarding import android.annotation.SuppressLint import android.content.Context -import com.squareup.anvil.annotations.ContributesBinding -import io.element.android.libraries.di.AppScope -import io.element.android.libraries.di.ApplicationContext -import javax.inject.Inject +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesBinding +import dev.zacsweers.metro.Inject +import io.element.android.libraries.di.annotations.ApplicationContext fun interface OnBoardingLogoResIdProvider { fun get(): Int? } @ContributesBinding(AppScope::class) -class DefaultOnBoardingLogoResIdProvider @Inject constructor( +@Inject +class DefaultOnBoardingLogoResIdProvider( @ApplicationContext private val context: Context, ) : OnBoardingLogoResIdProvider { @SuppressLint("DiscouragedApi") diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeMergedQrCodeLoginComponent.kt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeQrCodeLoginGraph.kt b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeQrCodeLoginGraph.kt index 640a103f93..5a2ca177e9 100644 --- a/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeQrCodeLoginGraph.kt +++ b/features/login/impl/src/test/kotlin/io/element/android/features/login/impl/di/FakeQrCodeLoginGraph.kt @@ -10,11 +10,10 @@ package io.element.android.features.login.impl.di import com.bumble.appyx.core.modality.BuildContext import com.bumble.appyx.core.node.Node import com.bumble.appyx.core.plugin.Plugin -import io.element.android.features.login.impl.qrcode.FakeQrCodeLoginManager import io.element.android.features.login.impl.qrcode.QrCodeLoginFlowNode import io.element.android.features.login.impl.qrcode.QrCodeLoginManager import io.element.android.libraries.architecture.AssistedNodeFactory -import io.element.android.libraries.architecture.createNode +import kotlin.reflect.KClass internal class FakeQrCodeLoginGraph( private val qrCodeLoginManager: QrCodeLoginManager, @@ -23,7 +22,7 @@ internal class FakeQrCodeLoginGraph( return mapOf( QrCodeLoginFlowNode::class to object : AssistedNodeFactory { override fun create(buildContext: BuildContext, plugins: List): QrCodeLoginFlowNode { - return createNode(buildContext, plugins) + error("This factory should not be called in tests") } } ) @@ -33,9 +32,9 @@ internal class FakeQrCodeLoginGraph( internal class Builder( private val qrCodeLoginManager: QrCodeLoginManager, - ) : QrCodeLoginComponent.Factory { - override fun create(): QrCodeLoginComponent { - return FakeQrCodeLoginComponent(qrCodeLoginManager) + ) : QrCodeLoginGraph.Factory { + override fun create(): QrCodeLoginGraph { + return FakeQrCodeLoginGraph(qrCodeLoginManager) } } } diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt index 3cd3fdbf08..47d4771ed9 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/DefaultLogoutEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultLogoutEntryPoint() : LogoutEntryPoint { +class DefaultLogoutEntryPoint : LogoutEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): LogoutEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt index 7bc33e961d..2cd7989cf1 100644 --- a/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt +++ b/features/logout/impl/src/main/kotlin/io/element/android/features/logout/impl/direct/DefaultDirectLogoutView.kt @@ -22,7 +22,7 @@ import io.element.android.libraries.di.SessionScope @ContributesBinding(SessionScope::class) @Inject -class DefaultDirectLogoutView() : DirectLogoutView { +class DefaultDirectLogoutView : DirectLogoutView { @Composable override fun Render(state: DirectLogoutState) { val eventSink = state.eventSink diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt index c6342dac1f..138763bd13 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/draft/VolatileComposerDraftStore.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.matrix.api.room.draft.ComposerDraft * Currently it's used to store draft message when moving to edit mode. */ @Inject -class VolatileComposerDraftStore() : ComposerDraftStore { +class VolatileComposerDraftStore : ComposerDraftStore { private val drafts: MutableMap = mutableMapOf() override suspend fun loadDraft(roomId: RoomId, threadRoot: ThreadId?): ComposerDraft? { diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt index b2e4125050..eec953f4cd 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/link/LinkChecker.kt @@ -21,7 +21,7 @@ interface LinkChecker { @ContributesBinding(AppScope::class) @Inject -class DefaultLinkChecker() : LinkChecker { +class DefaultLinkChecker : LinkChecker { override fun isSafe(link: Link): Boolean { return if (link.url.containsRtLOverride()) { false diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt index 5158fc2e57..b895572c43 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/DefaultMessageComposerContext.kt @@ -20,7 +20,7 @@ import io.element.android.libraries.textcomposer.model.MessageComposerMode @SingleIn(RoomScope::class) @ContributesBinding(RoomScope::class) @Inject -class DefaultMessageComposerContext() : MessageComposerContext { +class DefaultMessageComposerContext : MessageComposerContext { override var composerMode: MessageComposerMode by mutableStateOf(MessageComposerMode.Normal) internal set } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt index 1211155c4c..c22325a9a5 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/RichTextEditorStateFactory.kt @@ -21,7 +21,7 @@ interface RichTextEditorStateFactory { @ContributesBinding(AppScope::class) @Inject -class DefaultRichTextEditorStateFactory() : RichTextEditorStateFactory { +class DefaultRichTextEditorStateFactory : RichTextEditorStateFactory { @Composable override fun remember(): RichTextEditorState { return rememberRichTextEditorState() diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt index ef38656489..4f008705a5 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/messagecomposer/suggestions/SuggestionsProcessor.kt @@ -22,7 +22,7 @@ import io.element.android.libraries.textcomposer.model.SuggestionType * This class is responsible for processing suggestions when `@`, `/` or `#` are type in the composer. */ @Inject -class SuggestionsProcessor() { +class SuggestionsProcessor { /** * Process the suggestion. * @param suggestion The current suggestion input diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt index baad0470dc..36b64be0ce 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineItemIndexer.kt @@ -16,7 +16,7 @@ import kotlinx.coroutines.sync.withLock import timber.log.Timber @Inject -class TimelineItemIndexer() { +class TimelineItemIndexer { // This is a latch to wait for the first process call private val firstProcessLatch = CompletableDeferred() private val timelineEventsIndexes = mutableMapOf() diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt index 2cc44452ec..33316a134a 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/components/receipt/bottomsheet/ReadReceiptBottomSheetPresenter.kt @@ -17,7 +17,7 @@ import io.element.android.features.messages.impl.timeline.model.TimelineItem import io.element.android.libraries.architecture.Presenter @Inject -class ReadReceiptBottomSheetPresenter() : Presenter { +class ReadReceiptBottomSheetPresenter : Presenter { @Composable override fun present(): ReadReceiptBottomSheetState { var selectedEvent: TimelineItem.Event? by remember { mutableStateOf(null) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt index f82843af7b..ae7e49c80d 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseMessageFactory.kt @@ -13,7 +13,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent @Inject -class TimelineItemContentFailedToParseMessageFactory() { +class TimelineItemContentFailedToParseMessageFactory { fun create(@Suppress("UNUSED_PARAMETER") failedToParseMessageLike: FailedToParseMessageLikeContent): TimelineItemEventContent { return TimelineItemUnknownContent } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt index 9c68c5e364..38edb21b55 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentFailedToParseStateFactory.kt @@ -13,7 +13,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent @Inject -class TimelineItemContentFailedToParseStateFactory() { +class TimelineItemContentFailedToParseStateFactory { @Suppress("UNUSED_PARAMETER") fun create(failedToParseState: FailedToParseStateContent): TimelineItemEventContent { return TimelineItemUnknownContent diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt index 179bbd41c3..c79f2abbbc 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentRedactedFactory.kt @@ -13,7 +13,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent @Inject -class TimelineItemContentRedactedFactory() { +class TimelineItemContentRedactedFactory { fun create(@Suppress("UNUSED_PARAMETER") content: RedactedContent): TimelineItemEventContent { return TimelineItemRedactedContent } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt index 462add472b..0d44b7bf65 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemContentUTDFactory.kt @@ -13,7 +13,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent @Inject -class TimelineItemContentUTDFactory() { +class TimelineItemContentUTDFactory { fun create(content: UnableToDecryptContent): TimelineItemEventContent { return TimelineItemEncryptedContent(content.data) } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt index cc3b4e2f8b..2bbcc4f3ba 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/groups/TimelineItemGrouper.kt @@ -17,7 +17,7 @@ import kotlinx.collections.immutable.toImmutableList @SingleIn(RoomScope::class) @Inject -class TimelineItemGrouper() { +class TimelineItemGrouper { /** * Keys are identifier of items in a group, only one by group will be kept. * Values are the actual groupIds. diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt index e27eb974b4..3c76aad7c8 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/DefaultCreatePollEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultCreatePollEntryPoint() : CreatePollEntryPoint { +class DefaultCreatePollEntryPoint : CreatePollEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): CreatePollEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt index 4e55822b80..8c89a47c65 100644 --- a/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt +++ b/features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/history/DefaultPollHistoryEntryPoint.kt @@ -17,7 +17,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultPollHistoryEntryPoint() : PollHistoryEntryPoint { +class DefaultPollHistoryEntryPoint : PollHistoryEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext): Node { return parentNode.createNode(buildContext) } diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt index 285d8bdd88..da42cf87dd 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultCacheService.kt @@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) @Inject -class DefaultCacheService() : CacheService { +class DefaultCacheService : CacheService { private val _clearedCacheEventFlow = MutableSharedFlow(0) override val clearedCacheEventFlow: Flow = _clearedCacheEventFlow diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt index 628d7961fc..d0efc2107e 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/DefaultPreferencesEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultPreferencesEntryPoint() : PreferencesEntryPoint { +class DefaultPreferencesEntryPoint : PreferencesEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): PreferencesEntryPoint.NodeBuilder { return object : PreferencesEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt index fb58382b33..f36dc50543 100644 --- a/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt +++ b/features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/about/AboutPresenter.kt @@ -12,7 +12,7 @@ import dev.zacsweers.metro.Inject import io.element.android.libraries.architecture.Presenter @Inject -class AboutPresenter() : Presenter { +class AboutPresenter : Presenter { @Composable override fun present(): AboutState { return AboutState( diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt index 309da0b9e1..0415d36e1d 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/bugreport/DefaultBugReportEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultBugReportEntryPoint() : BugReportEntryPoint { +class DefaultBugReportEntryPoint : BugReportEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): BugReportEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeBindings.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeBindings.kt index dc603f7b8f..e1172c31fc 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeBindings.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/di/RageshakeBindings.kt @@ -7,9 +7,9 @@ package io.element.android.features.rageshake.impl.di -import com.squareup.anvil.annotations.ContributesTo +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesTo import io.element.android.features.rageshake.impl.crash.PreferencesCrashDataStore -import io.element.android.libraries.di.AppScope @ContributesTo(AppScope::class) interface RageshakeBindings { diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt index 97092f3774..9e450d5edb 100644 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/BugReportAppNameProvider.kt @@ -18,6 +18,6 @@ fun interface BugReportAppNameProvider { @ContributesBinding(AppScope::class) @Inject -class DefaultBugReportAppNameProvider() : BugReportAppNameProvider { +class DefaultBugReportAppNameProvider : BugReportAppNameProvider { override fun provide(): String = RageshakeConfig.BUG_REPORT_APP_NAME } diff --git a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt index 6bd827d3a1..e433c70bf6 100644 --- a/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt +++ b/features/reportroom/impl/src/main/kotlin/io/element/android/features/reportroom/impl/DefaultReportRoomEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.matrix.api.core.RoomId @ContributesBinding(AppScope::class) @Inject -class DefaultReportRoomEntryPoint() : ReportRoomEntryPoint { +class DefaultReportRoomEntryPoint : ReportRoomEntryPoint { override fun createNode(parentNode: Node, buildContext: BuildContext, roomId: RoomId): Node { return parentNode.createNode(buildContext, plugins = listOf(ReportRoomNode.Inputs(roomId))) } diff --git a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt index 88ad28cd6f..9c2d3d2cdf 100644 --- a/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt +++ b/features/roomaliasresolver/impl/src/main/kotlin/io/element/android/features/roomaliasresolver/impl/DefaultRoomAliasResolverEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultRoomAliasResolverEntryPoint() : RoomAliasResolverEntryPoint { +class DefaultRoomAliasResolverEntryPoint : RoomAliasResolverEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): RoomAliasResolverEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt index 4c43b8bda1..6d26ef32a1 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/DefaultRoomDetailsEntryPoint.kt @@ -20,7 +20,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultRoomDetailsEntryPoint() : RoomDetailsEntryPoint { +class DefaultRoomDetailsEntryPoint : RoomDetailsEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): RoomDetailsEntryPoint.NodeBuilder { return object : RoomDetailsEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt index f5e2cb8c9d..135b2d5aea 100644 --- a/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt +++ b/features/roomdirectory/impl/src/main/kotlin/io/element/android/features/roomdirectory/impl/DefaultRoomDirectoryEntryPoint.kt @@ -19,7 +19,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultRoomDirectoryEntryPoint() : RoomDirectoryEntryPoint { +class DefaultRoomDirectoryEntryPoint : RoomDirectoryEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): RoomDirectoryEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt index cc9e0b4e5f..830e3ef984 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt @@ -21,7 +21,7 @@ import timber.log.Timber @ContributesBinding(RoomScope::class) @Inject -class DefaultRoomMemberModerationRenderer() : RoomMemberModerationRenderer { +class DefaultRoomMemberModerationRenderer : RoomMemberModerationRenderer { @Composable override fun Render( state: RoomMemberModerationState, diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt index 9f3f2c03f3..6d5358299b 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/DefaultSecureBackupEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultSecureBackupEntryPoint() : SecureBackupEntryPoint { +class DefaultSecureBackupEntryPoint : SecureBackupEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): SecureBackupEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt index 68a5ffd366..24a8be7f77 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/setup/SecureBackupSetupStateMachine.kt @@ -16,7 +16,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import com.freeletics.flowredux.dsl.State as MachineState @Inject -class SecureBackupSetupStateMachine() : FlowReduxStateMachine( +class SecureBackupSetupStateMachine : FlowReduxStateMachine( initialState = State.Initial ) { init { diff --git a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/tools/RecoveryKeyTools.kt b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/tools/RecoveryKeyTools.kt index 45305e9169..5805146c71 100644 --- a/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/tools/RecoveryKeyTools.kt +++ b/features/securebackup/impl/src/main/kotlin/io/element/android/features/securebackup/impl/tools/RecoveryKeyTools.kt @@ -13,7 +13,7 @@ private const val RECOVERY_KEY_LENGTH = 48 private const val BASE_58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" @Inject -class RecoveryKeyTools() { +class RecoveryKeyTools { fun isRecoveryKeyFormatValid(recoveryKey: String): Boolean { val recoveryKeyWithoutSpace = recoveryKey.replace("\\s+".toRegex(), "") return recoveryKeyWithoutSpace.length == RECOVERY_KEY_LENGTH && recoveryKeyWithoutSpace.all { BASE_58_ALPHABET.contains(it) } diff --git a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt index 8d5770e126..fe65c60b73 100644 --- a/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt +++ b/features/share/impl/src/main/kotlin/io/element/android/features/share/impl/DefaultShareEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.di.SessionScope @ContributesBinding(SessionScope::class) @Inject -class DefaultShareEntryPoint() : ShareEntryPoint { +class DefaultShareEntryPoint : ShareEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): ShareEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt index c85a957be6..91def6db8d 100644 --- a/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt +++ b/features/signedout/impl/src/main/kotlin/io/element/android/features/signedout/impl/DefaultSignedOutEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultSignedOutEntryPoint() : SignedOutEntryPoint { +class DefaultSignedOutEntryPoint : SignedOutEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): SignedOutEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt index 063293fe90..c33ac4356f 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/DefaultStartChatEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultStartChatEntryPoint() : StartChatEntryPoint { +class DefaultStartChatEntryPoint : StartChatEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): StartChatEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt index f6db03a577..99fc19f6e1 100644 --- a/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt +++ b/features/startchat/impl/src/main/kotlin/io/element/android/features/startchat/impl/userlist/UserListDataStore.kt @@ -13,7 +13,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow @Inject -class UserListDataStore() { +class UserListDataStore { private val _selectedUsers: MutableStateFlow> = MutableStateFlow(emptyList()) fun selectUser(user: MatrixUser) { diff --git a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt index 39fb84ec3e..bfc8a30df6 100644 --- a/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt +++ b/features/userprofile/impl/src/main/kotlin/io/element/android/features/userprofile/impl/DefaultUserProfileEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultUserProfileEntryPoint() : UserProfileEntryPoint { +class DefaultUserProfileEntryPoint : UserProfileEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): UserProfileEntryPoint.NodeBuilder { return object : UserProfileEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt index e48c65b828..c1a6418153 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/incoming/DefaultIncomingVerificationEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultIncomingVerificationEntryPoint() : IncomingVerificationEntryPoint { +class DefaultIncomingVerificationEntryPoint : IncomingVerificationEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): IncomingVerificationEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt index 8bb709a621..8355e71f75 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/DefaultOutgoingVerificationEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultOutgoingVerificationEntryPoint() : OutgoingVerificationEntryPoint { +class DefaultOutgoingVerificationEntryPoint : OutgoingVerificationEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): OutgoingVerificationEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationNode.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationNode.kt index 38c7dd7599..8e2e306d35 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationNode.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationNode.kt @@ -25,26 +25,26 @@ import io.element.android.libraries.di.SessionScope class OutgoingVerificationNode( @Assisted buildContext: BuildContext, @Assisted plugins: List, -// presenterFactory: OutgoingVerificationPresenter.Factory, + presenterFactory: OutgoingVerificationPresenter.Factory, ) : Node(buildContext, plugins = plugins) { private val callback = plugins().first() private val inputs = inputs() -// private val presenter = presenterFactory.create( -// showDeviceVerifiedScreen = inputs.showDeviceVerifiedScreen, -// verificationRequest = inputs.verificationRequest, -// ) + private val presenter = presenterFactory.create( + showDeviceVerifiedScreen = inputs.showDeviceVerifiedScreen, + verificationRequest = inputs.verificationRequest, + ) @Composable override fun View(modifier: Modifier) { -// val state = presenter.present() -// OutgoingVerificationView( -// state = state, -// modifier = modifier, -// onLearnMoreClick = callback::onLearnMoreAboutEncryption, -// onFinish = callback::onDone, -// onBack = callback::onBack, -// ) + val state = presenter.present() + OutgoingVerificationView( + state = state, + modifier = modifier, + onLearnMoreClick = callback::onLearnMoreAboutEncryption, + onFinish = callback::onDone, + onBack = callback::onBack, + ) } } diff --git a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt index 60688a9cb7..5b6004845d 100644 --- a/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt +++ b/features/verifysession/impl/src/main/kotlin/io/element/android/features/verifysession/impl/outgoing/OutgoingVerificationPresenter.kt @@ -9,150 +9,172 @@ package io.element.android.features.verifysession.impl.outgoing +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import com.freeletics.flowredux.compose.rememberStateAndDispatch +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.Inject +import io.element.android.libraries.architecture.AsyncData +import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.matrix.api.encryption.EncryptionService +import io.element.android.libraries.matrix.api.verification.SessionVerificationService +import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus +import io.element.android.libraries.matrix.api.verification.VerificationFlowState +import io.element.android.libraries.matrix.api.verification.VerificationRequest +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import timber.log.Timber +import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationStateMachine.Event as StateMachineEvent +import io.element.android.features.verifysession.impl.outgoing.OutgoingVerificationStateMachine.State as StateMachineState -// @Inject -// class OutgoingVerificationPresenter( -// @Assisted private val showDeviceVerifiedScreen: Boolean, -// @Assisted private val verificationRequest: VerificationRequest.Outgoing, -// private val sessionVerificationService: SessionVerificationService, -// private val encryptionService: EncryptionService, -// ) : Presenter { -// @AssistedFactory -// interface Factory { -// fun create( -// verificationRequest: VerificationRequest.Outgoing, -// showDeviceVerifiedScreen: Boolean, -// ): OutgoingVerificationPresenter -// } -// -// private val stateMachine = OutgoingVerificationStateMachine( -// sessionVerificationService = sessionVerificationService, -// encryptionService = encryptionService, -// ) -// -// @Composable -// override fun present(): OutgoingVerificationState { -// val stateAndDispatch = stateMachine.rememberStateAndDispatch() -// -// val sessionVerifiedStatus by sessionVerificationService.sessionVerifiedStatus.collectAsState() -// val step by remember { -// derivedStateOf { -// when (verificationRequest) { -// is VerificationRequest.Outgoing.CurrentSession -> { -// when (sessionVerifiedStatus) { -// SessionVerifiedStatus.Unknown -> OutgoingVerificationState.Step.Loading -// SessionVerifiedStatus.NotVerified -> { -// stateAndDispatch.state.value.toVerificationStep() -// } -// SessionVerifiedStatus.Verified -> { -// if (stateAndDispatch.state.value != StateMachineState.Initial || showDeviceVerifiedScreen) { -// // The user has verified the session, we need to show the success screen -// OutgoingVerificationState.Step.Completed -// } else { -// // Automatic verification, which can happen on freshly created account, in this case, skip the screen -// OutgoingVerificationState.Step.Exit -// } -// } -// } -// } -// is VerificationRequest.Outgoing.User -> stateAndDispatch.state.value.toVerificationStep() -// } -// } -// } -// -// // Start this after observing state machine -// LaunchedEffect(Unit) { -// // Force reset, just in case the service was left in a broken state -// sessionVerificationService.reset(cancelAnyPendingVerificationAttempt = true) -// -// observeVerificationService() -// } -// -// fun handleEvents(event: OutgoingVerificationViewEvents) { -// Timber.d("Verification user action: ${event::class.simpleName}") -// when (event) { -// // Just relay the event to the state machine -// OutgoingVerificationViewEvents.RequestVerification -> StateMachineEvent.RequestVerification(verificationRequest) -// OutgoingVerificationViewEvents.StartSasVerification -> StateMachineEvent.StartSasVerification -// OutgoingVerificationViewEvents.ConfirmVerification -> StateMachineEvent.AcceptChallenge -// OutgoingVerificationViewEvents.DeclineVerification -> StateMachineEvent.DeclineChallenge -// OutgoingVerificationViewEvents.Cancel -> StateMachineEvent.Cancel -// OutgoingVerificationViewEvents.Reset -> StateMachineEvent.Reset -// }.let { stateMachineEvent -> -// stateAndDispatch.dispatchAction(stateMachineEvent) -// } -// } -// return OutgoingVerificationState( -// step = step, -// request = verificationRequest, -// eventSink = ::handleEvents, -// ) -// } -// -// private fun StateMachineState?.toVerificationStep(): OutgoingVerificationState.Step = -// when (val machineState = this) { -// StateMachineState.Initial, null -> { -// OutgoingVerificationState.Step.Initial -// } -// is StateMachineState.RequestingVerification, -// is StateMachineState.StartingSasVerification, -// StateMachineState.SasVerificationStarted -> { -// OutgoingVerificationState.Step.AwaitingOtherDeviceResponse -// } -// -// StateMachineState.VerificationRequestAccepted -> { -// OutgoingVerificationState.Step.Ready -// } -// -// is StateMachineState.Canceled -> { -// OutgoingVerificationState.Step.Canceled -// } -// -// is StateMachineState.Verifying -> { -// val async = when (machineState) { -// is StateMachineState.Verifying.Replying -> AsyncData.Loading() -// else -> AsyncData.Uninitialized -// } -// OutgoingVerificationState.Step.Verifying(machineState.data, async) -// } -// -// StateMachineState.Completed -> { -// OutgoingVerificationState.Step.Completed -// } -// -// StateMachineState.Exit -> { -// OutgoingVerificationState.Step.Exit -// } -// } -// -// private fun CoroutineScope.observeVerificationService() { -// sessionVerificationService.verificationFlowState -// .onEach { Timber.d("Verification flow state: ${it::class.simpleName}") } -// .onEach { verificationAttemptState -> -// when (verificationAttemptState) { -// VerificationFlowState.Initial -> stateMachine.dispatch(StateMachineEvent.Reset) -// VerificationFlowState.DidAcceptVerificationRequest -> { -// stateMachine.dispatch(StateMachineEvent.DidAcceptVerificationRequest) -// } -// VerificationFlowState.DidStartSasVerification -> { -// stateMachine.dispatch(StateMachineEvent.DidStartSasVerification) -// } -// is VerificationFlowState.DidReceiveVerificationData -> { -// stateMachine.dispatch(StateMachineEvent.DidReceiveChallenge(verificationAttemptState.data)) -// } -// VerificationFlowState.DidFinish -> { -// stateMachine.dispatch(StateMachineEvent.DidAcceptChallenge) -// } -// VerificationFlowState.DidCancel -> { -// stateMachine.dispatch(StateMachineEvent.DidCancel) -// } -// VerificationFlowState.DidFail -> { -// stateMachine.dispatch(StateMachineEvent.DidFail) -// } -// } -// } -// .launchIn(this) -// } -// } +@Inject +class OutgoingVerificationPresenter( + @Assisted private val showDeviceVerifiedScreen: Boolean, + @Assisted private val verificationRequest: VerificationRequest.Outgoing, + private val sessionVerificationService: SessionVerificationService, + private val encryptionService: EncryptionService, +) : Presenter { + @AssistedFactory + interface Factory { + fun create( + verificationRequest: VerificationRequest.Outgoing, + showDeviceVerifiedScreen: Boolean, + ): OutgoingVerificationPresenter + } + + private val stateMachine = OutgoingVerificationStateMachine( + sessionVerificationService = sessionVerificationService, + encryptionService = encryptionService, + ) + + @Composable + override fun present(): OutgoingVerificationState { + val stateAndDispatch = stateMachine.rememberStateAndDispatch() + + val sessionVerifiedStatus by sessionVerificationService.sessionVerifiedStatus.collectAsState() + val step by remember { + derivedStateOf { + when (verificationRequest) { + is VerificationRequest.Outgoing.CurrentSession -> { + when (sessionVerifiedStatus) { + SessionVerifiedStatus.Unknown -> OutgoingVerificationState.Step.Loading + SessionVerifiedStatus.NotVerified -> { + stateAndDispatch.state.value.toVerificationStep() + } + SessionVerifiedStatus.Verified -> { + if (stateAndDispatch.state.value != StateMachineState.Initial || showDeviceVerifiedScreen) { + // The user has verified the session, we need to show the success screen + OutgoingVerificationState.Step.Completed + } else { + // Automatic verification, which can happen on freshly created account, in this case, skip the screen + OutgoingVerificationState.Step.Exit + } + } + } + } + is VerificationRequest.Outgoing.User -> stateAndDispatch.state.value.toVerificationStep() + } + } + } + + // Start this after observing state machine + LaunchedEffect(Unit) { + // Force reset, just in case the service was left in a broken state + sessionVerificationService.reset(cancelAnyPendingVerificationAttempt = true) + + observeVerificationService() + } + + fun handleEvents(event: OutgoingVerificationViewEvents) { + Timber.d("Verification user action: ${event::class.simpleName}") + when (event) { + // Just relay the event to the state machine + OutgoingVerificationViewEvents.RequestVerification -> StateMachineEvent.RequestVerification(verificationRequest) + OutgoingVerificationViewEvents.StartSasVerification -> StateMachineEvent.StartSasVerification + OutgoingVerificationViewEvents.ConfirmVerification -> StateMachineEvent.AcceptChallenge + OutgoingVerificationViewEvents.DeclineVerification -> StateMachineEvent.DeclineChallenge + OutgoingVerificationViewEvents.Cancel -> StateMachineEvent.Cancel + OutgoingVerificationViewEvents.Reset -> StateMachineEvent.Reset + }.let { stateMachineEvent -> + stateAndDispatch.dispatchAction(stateMachineEvent) + } + } + return OutgoingVerificationState( + step = step, + request = verificationRequest, + eventSink = ::handleEvents, + ) + } + + private fun StateMachineState?.toVerificationStep(): OutgoingVerificationState.Step = + when (val machineState = this) { + StateMachineState.Initial, null -> { + OutgoingVerificationState.Step.Initial + } + is StateMachineState.RequestingVerification, + is StateMachineState.StartingSasVerification, + StateMachineState.SasVerificationStarted -> { + OutgoingVerificationState.Step.AwaitingOtherDeviceResponse + } + + StateMachineState.VerificationRequestAccepted -> { + OutgoingVerificationState.Step.Ready + } + + is StateMachineState.Canceled -> { + OutgoingVerificationState.Step.Canceled + } + + is StateMachineState.Verifying -> { + val async = when (machineState) { + is StateMachineState.Verifying.Replying -> AsyncData.Loading() + else -> AsyncData.Uninitialized + } + OutgoingVerificationState.Step.Verifying(machineState.data, async) + } + + StateMachineState.Completed -> { + OutgoingVerificationState.Step.Completed + } + + StateMachineState.Exit -> { + OutgoingVerificationState.Step.Exit + } + } + + private fun CoroutineScope.observeVerificationService() { + sessionVerificationService.verificationFlowState + .onEach { Timber.d("Verification flow state: ${it::class.simpleName}") } + .onEach { verificationAttemptState -> + when (verificationAttemptState) { + VerificationFlowState.Initial -> stateMachine.dispatch(StateMachineEvent.Reset) + VerificationFlowState.DidAcceptVerificationRequest -> { + stateMachine.dispatch(StateMachineEvent.DidAcceptVerificationRequest) + } + VerificationFlowState.DidStartSasVerification -> { + stateMachine.dispatch(StateMachineEvent.DidStartSasVerification) + } + is VerificationFlowState.DidReceiveVerificationData -> { + stateMachine.dispatch(StateMachineEvent.DidReceiveChallenge(verificationAttemptState.data)) + } + VerificationFlowState.DidFinish -> { + stateMachine.dispatch(StateMachineEvent.DidAcceptChallenge) + } + VerificationFlowState.DidCancel -> { + stateMachine.dispatch(StateMachineEvent.DidCancel) + } + VerificationFlowState.DidFail -> { + stateMachine.dispatch(StateMachineEvent.DidFail) + } + } + } + .launchIn(this) + } +} diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt index 1c6349de0e..0e1f1e11b9 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultTextFileViewer.kt @@ -19,7 +19,7 @@ import kotlinx.collections.immutable.ImmutableList @ContributesBinding(AppScope::class) @Inject -class DefaultTextFileViewer() : TextFileViewer { +class DefaultTextFileViewer : TextFileViewer { @Composable override fun Render( lines: ImmutableList, diff --git a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt index f18e804efb..64d469c34f 100644 --- a/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt +++ b/features/viewfolder/impl/src/main/kotlin/io/element/android/features/viewfolder/impl/DefaultViewFolderEntryPoint.kt @@ -19,7 +19,7 @@ import io.element.android.libraries.architecture.createNode @ContributesBinding(AppScope::class) @Inject -class DefaultViewFolderEntryPoint() : ViewFolderEntryPoint { +class DefaultViewFolderEntryPoint : ViewFolderEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): ViewFolderEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt index f3da7a8de8..7b3d57259d 100644 --- a/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt +++ b/libraries/cryptography/impl/src/main/kotlin/io/element/android/libraries/cryptography/impl/AESEncryptionDecryptionService.kt @@ -22,7 +22,7 @@ import javax.crypto.spec.GCMParameterSpec */ @ContributesBinding(AppScope::class) @Inject -class AESEncryptionDecryptionService() : EncryptionDecryptionService { +class AESEncryptionDecryptionService : EncryptionDecryptionService { override fun createEncryptionCipher(key: SecretKey): Cipher { return Cipher.getInstance(AESEncryptionSpecs.CIPHER_TRANSFORMATION).apply { init(Cipher.ENCRYPT_MODE, key) diff --git a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeepLinkCreator.kt b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeepLinkCreator.kt index 76a9722f91..7c36ecd0b1 100644 --- a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeepLinkCreator.kt +++ b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeepLinkCreator.kt @@ -16,7 +16,8 @@ import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.core.ThreadId @ContributesBinding(AppScope::class) -class DefaultDeepLinkCreator @Inject constructor() : DeepLinkCreator { +@Inject +class DefaultDeepLinkCreator : DeepLinkCreator { override fun create(sessionId: SessionId, roomId: RoomId?, threadId: ThreadId?): String { return buildString { append("$SCHEME://$HOST/") diff --git a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeeplinkParser.kt b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeeplinkParser.kt index 0c7d626985..e6ab87b2b3 100644 --- a/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeeplinkParser.kt +++ b/libraries/deeplink/impl/src/main/kotlin/io/element/android/libraries/deeplink/impl/DefaultDeeplinkParser.kt @@ -20,7 +20,7 @@ import io.element.android.libraries.matrix.api.core.ThreadId @ContributesBinding(AppScope::class) @Inject -class DefaultDeeplinkParser: DeeplinkParser { +class DefaultDeeplinkParser : DeeplinkParser { override fun getFromIntent(intent: Intent): DeeplinkData? { return intent .takeIf { it.action == Intent.ACTION_VIEW } diff --git a/libraries/di/src/main/kotlin/io/element/android/libraries/di/AppScope.kt b/libraries/di/src/main/kotlin/io/element/android/libraries/di/AppScope.kt deleted file mode 100644 index a1015055bf..0000000000 --- a/libraries/di/src/main/kotlin/io/element/android/libraries/di/AppScope.kt +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2022-2024 New Vector 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.di - -abstract class AppScope private constructor() diff --git a/libraries/matrix/api/build.gradle.kts b/libraries/matrix/api/build.gradle.kts index 4f006a7c81..272527dc9f 100644 --- a/libraries/matrix/api/build.gradle.kts +++ b/libraries/matrix/api/build.gradle.kts @@ -1,5 +1,6 @@ import config.BuildTimeConfig import extension.buildConfigFieldStr +import extension.setupDependencyInjection /* * Copyright 2022-2024 New Vector Ltd. @@ -14,6 +15,8 @@ plugins { alias(libs.plugins.kotlin.serialization) } +setupDependencyInjection() + android { namespace = "io.element.android.libraries.matrix.api" diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/mxc/MxcTools.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/mxc/MxcTools.kt index 94b18bdead..8525425e1b 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/mxc/MxcTools.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/mxc/MxcTools.kt @@ -10,7 +10,7 @@ package io.element.android.libraries.matrix.api.mxc import dev.zacsweers.metro.Inject @Inject -class MxcTools() { +class MxcTools { /** * Regex to match a Matrix Content (mxc://) URI. * diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt index 98c6c5da84..57486da3e8 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/ClientBuilderProvider.kt @@ -18,7 +18,7 @@ interface ClientBuilderProvider { @ContributesBinding(AppScope::class) @Inject -class RustClientBuilderProvider() : ClientBuilderProvider { +class RustClientBuilderProvider : ClientBuilderProvider { override fun provide(): ClientBuilder { return ClientBuilder() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt index b3bbe9d4a7..88ff69459f 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustSdkMetadata.kt @@ -15,7 +15,7 @@ import org.matrix.rustcomponents.sdk.sdkGitSha @ContributesBinding(AppScope::class) @Inject -class RustSdkMetadata() : SdkMetadata { +class RustSdkMetadata : SdkMetadata { override val sdkGitSha: String get() = sdkGitSha() } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt index e204a9ff3e..17cff41bc1 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/auth/qrlogin/RustQrCodeLoginDataFactory.kt @@ -17,7 +17,7 @@ import org.matrix.rustcomponents.sdk.QrCodeData @ContributesBinding(AppScope::class) @Inject -class RustQrCodeLoginDataFactory() : MatrixQrCodeLoginDataFactory { +class RustQrCodeLoginDataFactory : MatrixQrCodeLoginDataFactory { override fun parseQrCodeData(data: ByteArray): Result { return runCatchingExceptions { SdkQrCodeLoginData(QrCodeData.fromBytes(data)) } } diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt index 60e132df71..d5d637f54b 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/certificates/DefaultUserCertificatesProvider.kt @@ -16,7 +16,7 @@ import java.security.KeyStoreException @ContributesBinding(AppScope::class) @Inject -class DefaultUserCertificatesProvider() : UserCertificatesProvider { +class DefaultUserCertificatesProvider : UserCertificatesProvider { /** * Get additional user-installed certificates from the `AndroidCAStore` `Keystore`. * diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt index f25b054011..b6d9aa2b89 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/keys/DefaultPassphraseGenerator.kt @@ -17,7 +17,7 @@ private const val SECRET_SIZE = 256 @ContributesBinding(AppScope::class) @Inject -class DefaultPassphraseGenerator() : PassphraseGenerator { +class DefaultPassphraseGenerator : PassphraseGenerator { override fun generatePassphrase(): String? { val key = ByteArray(size = SECRET_SIZE) SecureRandom().nextBytes(key) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt index c2eaab89ce..c03be3bbe9 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultMatrixToConverter.kt @@ -21,7 +21,7 @@ import io.element.android.libraries.matrix.api.permalink.MatrixToConverter */ @ContributesBinding(AppScope::class) @Inject -class DefaultMatrixToConverter() : MatrixToConverter { +class DefaultMatrixToConverter : MatrixToConverter { /** * Try to convert a URL from an element web instance or from a client permalink to a matrix.to url. * To be successfully converted, URL path should contain one of the [SUPPORTED_PATHS]. diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt index 3016d437b0..2ed7990ee4 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/permalink/DefaultPermalinkBuilder.kt @@ -21,7 +21,7 @@ import org.matrix.rustcomponents.sdk.matrixToUserPermalink @ContributesBinding(AppScope::class) @Inject -class DefaultPermalinkBuilder() : PermalinkBuilder { +class DefaultPermalinkBuilder : PermalinkBuilder { override fun permalinkForUser(userId: UserId): Result { if (!MatrixPatterns.isUserId(userId.value)) { return Result.failure(PermalinkBuilderError.InvalidData) diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt index ae462bba86..492d5e5792 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/platform/RustInitPlatformService.kt @@ -17,7 +17,7 @@ import org.matrix.rustcomponents.sdk.initPlatform @ContributesBinding(AppScope::class) @Inject -class RustInitPlatformService() : InitPlatformService { +class RustInitPlatformService : InitPlatformService { override fun init(tracingConfiguration: TracingConfiguration) { initPlatform( config = tracingConfiguration.map(), diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt index 3b3ec8996a..29f72848b8 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/TimelineEventTypeFilterFactory.kt @@ -20,7 +20,7 @@ interface TimelineEventTypeFilterFactory { @ContributesBinding(AppScope::class) @Inject -class RustTimelineEventTypeFilterFactory() : TimelineEventTypeFilterFactory { +class RustTimelineEventTypeFilterFactory : TimelineEventTypeFilterFactory { override fun create(listStateEventType: List): TimelineEventTypeFilter { return TimelineEventTypeFilter.exclude( listStateEventType.map { stateEventType -> diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt index 90b1b2c444..039144bf55 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/alias/DefaultRoomAliasHelper.kt @@ -15,7 +15,7 @@ import io.element.android.libraries.matrix.api.room.alias.RoomAliasHelper @ContributesBinding(AppScope::class) @Inject -class DefaultRoomAliasHelper() : RoomAliasHelper { +class DefaultRoomAliasHelper : RoomAliasHelper { override fun roomAliasNameFromRoomDisplayName(name: String): String { return org.matrix.rustcomponents.sdk.roomAliasNameFromRoomDisplayName(name) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt index bc4443d3d3..58dac492dc 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomMemberProfilesCache.kt @@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.runningFold @SingleIn(RoomScope::class) @Inject -class RoomMemberProfilesCache() { +class RoomMemberProfilesCache { private val cache = MutableStateFlow(mapOf()) val updateFlow = cache.drop(1).runningFold(0) { acc, _ -> acc + 1 } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt index 23e18c78eb..f9253d351f 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/messages/RoomNamesCache.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.flow.runningFold @SingleIn(RoomScope::class) @Inject -class RoomNamesCache() { +class RoomNamesCache { private val cache = MutableStateFlow(mapOf()) val updateFlow = cache.drop(1).runningFold(0) { acc, _ -> acc + 1 } diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt index 152207e04d..e9e62131aa 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaGalleryEntryPoint.kt @@ -19,7 +19,7 @@ import io.element.android.libraries.mediaviewer.impl.gallery.root.MediaGalleryRo @ContributesBinding(AppScope::class) @Inject -class DefaultMediaGalleryEntryPoint() : MediaGalleryEntryPoint { +class DefaultMediaGalleryEntryPoint : MediaGalleryEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): MediaGalleryEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt index 43326957fb..d2800ef9b8 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/DefaultMediaViewerEntryPoint.kt @@ -23,7 +23,7 @@ import io.element.android.libraries.mediaviewer.impl.viewer.MediaViewerNode @ContributesBinding(AppScope::class) @Inject -class DefaultMediaViewerEntryPoint() : MediaViewerEntryPoint { +class DefaultMediaViewerEntryPoint : MediaViewerEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): MediaViewerEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt index 678c496694..102fc611ef 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/datasource/MediaItemsPostProcessor.kt @@ -13,7 +13,7 @@ import io.element.android.libraries.mediaviewer.impl.model.MediaItem import kotlinx.collections.immutable.toImmutableList @Inject -class MediaItemsPostProcessor() { +class MediaItemsPostProcessor { fun process( mediaItems: List, ): GroupedMediaItems { diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt index 028abf8bd6..009218d755 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/util/FileExtensionExtractorWithValidation.kt @@ -15,7 +15,7 @@ import io.element.android.libraries.mediaviewer.api.util.FileExtensionExtractor @ContributesBinding(AppScope::class) @Inject -class FileExtensionExtractorWithValidation() : FileExtensionExtractor { +class FileExtensionExtractorWithValidation : FileExtensionExtractor { override fun extractFromName(name: String): String { val fileExtension = name.substringAfterLast('.', "") // Makes sure the extension is known by the system, otherwise default to binary extension. diff --git a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt index f2015eff84..03d37690ed 100644 --- a/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt +++ b/libraries/mediaviewer/impl/src/main/kotlin/io/element/android/libraries/mediaviewer/impl/viewer/PagerKeysHandler.kt @@ -36,7 +36,7 @@ import io.element.android.libraries.mediaviewer.impl.model.eventId * (keyOffset = -1) */ @Inject -class PagerKeysHandler() { +class PagerKeysHandler { private data class Data( val mediaItems: List, val keyOffset: Long, diff --git a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt index 081d5c279d..c49128543a 100644 --- a/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt +++ b/libraries/oidc/impl/src/main/kotlin/io/element/android/libraries/oidc/impl/DefaultOidcActionFlow.kt @@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.MutableStateFlow @ContributesBinding(AppScope::class) @SingleIn(AppScope::class) @Inject -class DefaultOidcActionFlow() : OidcActionFlow { +class DefaultOidcActionFlow : OidcActionFlow { private val mutableStateFlow = MutableStateFlow(null) override fun post(oidcAction: OidcAction) { diff --git a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt index e04fc741cf..f2f83e86e5 100644 --- a/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt +++ b/libraries/permissions/impl/src/main/kotlin/io/element/android/libraries/permissions/impl/AccompanistPermissionStateProvider.kt @@ -24,7 +24,7 @@ interface ComposablePermissionStateProvider { @ContributesBinding(AppScope::class) @Inject -class AccompanistPermissionStateProvider() : ComposablePermissionStateProvider { +class AccompanistPermissionStateProvider : ComposablePermissionStateProvider { @Composable override fun provide(permission: String, onPermissionResult: (Boolean) -> Unit): PermissionState { return rememberPermissionState( diff --git a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt index 525b9372b2..78fccf0e84 100644 --- a/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt +++ b/libraries/preferences/impl/src/main/kotlin/io/element/android/libraries/preferences/impl/store/DefaultPreferencesDataStoreFactory.kt @@ -16,7 +16,7 @@ import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn import io.element.android.libraries.androidutils.preferences.DefaultPreferencesCorruptionHandlerFactory -import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.di.annotations.ApplicationContext import io.element.android.libraries.preferences.api.store.PreferenceDataStoreFactory import java.util.concurrent.ConcurrentHashMap diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt index 77cf91cbdd..323c32f64a 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/ReplyMessageExtractor.kt @@ -19,7 +19,7 @@ interface ReplyMessageExtractor { @ContributesBinding(AppScope::class) @Inject -class AndroidReplyMessageExtractor() : ReplyMessageExtractor { +class AndroidReplyMessageExtractor : ReplyMessageExtractor { override fun getReplyMessage(intent: Intent): String? { return RemoteInput.getResultsFromIntent(intent) ?.getCharSequence(NotificationBroadcastReceiver.KEY_TEXT_REPLY) diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt index e909ee0cab..86cd2f630c 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/DiagnosticPushHandler.kt @@ -15,7 +15,7 @@ import kotlinx.coroutines.flow.SharedFlow @SingleIn(AppScope::class) @Inject -class DiagnosticPushHandler() { +class DiagnosticPushHandler { private val _state = MutableSharedFlow() val state: SharedFlow = _state diff --git a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt index 180c50ad26..e20876198e 100644 --- a/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt +++ b/libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/troubleshoot/NotificationClickHandler.kt @@ -15,7 +15,7 @@ import kotlinx.coroutines.flow.SharedFlow @SingleIn(AppScope::class) @Inject -class NotificationClickHandler() { +class NotificationClickHandler { private val _state = MutableSharedFlow(extraBufferCapacity = 1) val state: SharedFlow = _state diff --git a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt index b0993754e6..410fc05014 100644 --- a/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt +++ b/libraries/pushproviders/firebase/src/main/kotlin/io/element/android/libraries/pushproviders/firebase/FirebasePushParser.kt @@ -11,7 +11,7 @@ import dev.zacsweers.metro.Inject import io.element.android.libraries.pushproviders.api.PushData @Inject -class FirebasePushParser() { +class FirebasePushParser { fun parse(message: Map): PushData? { val pushDataFirebase = PushDataFirebase( eventId = message["event_id"], diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt index cfd96c2010..57813f8fde 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/GuardServiceStarter.kt @@ -18,4 +18,4 @@ interface GuardServiceStarter { @ContributesBinding(AppScope::class) @Inject -class NoopGuardServiceStarter() : GuardServiceStarter +class NoopGuardServiceStarter : GuardServiceStarter diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt index a1e43c47d9..f1290636c3 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/UnifiedPushParser.kt @@ -13,7 +13,7 @@ import io.element.android.libraries.pushproviders.api.PushData import kotlinx.serialization.json.Json @Inject -class UnifiedPushParser() { +class UnifiedPushParser { private val json by lazy { Json { ignoreUnknownKeys = true } } fun parse(message: ByteArray, clientSecret: String): PushData? { diff --git a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt index 88ddc88b58..c6a1353a2f 100644 --- a/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt +++ b/libraries/pushproviders/unifiedpush/src/main/kotlin/io/element/android/libraries/pushproviders/unifiedpush/registration/EndpointRegistrationHandler.kt @@ -20,7 +20,7 @@ data class RegistrationResult( @SingleIn(AppScope::class) @Inject -class EndpointRegistrationHandler() { +class EndpointRegistrationHandler { private val _state = MutableSharedFlow() val state: SharedFlow = _state diff --git a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt index f6bd07b695..be991ca0c5 100644 --- a/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt +++ b/libraries/pushstore/impl/src/main/kotlin/io/element/android/libraries/pushstore/impl/clientsecret/DefaultPushClientSecretFactory.kt @@ -15,7 +15,7 @@ import java.util.UUID @ContributesBinding(AppScope::class) @Inject -class DefaultPushClientSecretFactory() : PushClientSecretFactory { +class DefaultPushClientSecretFactory : PushClientSecretFactory { override fun create(): String { return UUID.randomUUID().toString() } diff --git a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt index c01703431d..0c6ba57b9f 100644 --- a/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt +++ b/libraries/roomselect/impl/src/main/kotlin/io/element/android/libraries/roomselect/impl/DefaultRoomSelectEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.roomselect.api.RoomSelectEntryPoint @ContributesBinding(SessionScope::class) @Inject -class DefaultRoomSelectEntryPoint() : RoomSelectEntryPoint { +class DefaultRoomSelectEntryPoint : RoomSelectEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): RoomSelectEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt index d8995e9771..b9d9c91814 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/DefaultNotificationTroubleShootEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.troubleshoot.api.NotificationTroubleShootEnt @ContributesBinding(AppScope::class) @Inject -class DefaultNotificationTroubleShootEntryPoint() : NotificationTroubleShootEntryPoint { +class DefaultNotificationTroubleShootEntryPoint : NotificationTroubleShootEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): NotificationTroubleShootEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt index 7895508d36..9a33848cae 100644 --- a/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt +++ b/libraries/troubleshoot/impl/src/main/kotlin/io/element/android/libraries/troubleshoot/impl/history/DefaultPushHistoryEntryPoint.kt @@ -18,7 +18,7 @@ import io.element.android.libraries.troubleshoot.api.PushHistoryEntryPoint @ContributesBinding(AppScope::class) @Inject -class DefaultPushHistoryEntryPoint() : PushHistoryEntryPoint { +class DefaultPushHistoryEntryPoint : PushHistoryEntryPoint { override fun nodeBuilder(parentNode: Node, buildContext: BuildContext): PushHistoryEntryPoint.NodeBuilder { val plugins = ArrayList() diff --git a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt index c27bb03e10..6001e74615 100644 --- a/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt +++ b/libraries/voicerecorder/impl/src/main/kotlin/io/element/android/libraries/voicerecorder/impl/audio/DBovAudioLevelCalculator.kt @@ -21,7 +21,7 @@ import kotlin.math.sqrt */ @ContributesBinding(RoomScope::class) @Inject -class DBovAudioLevelCalculator() : AudioLevelCalculator { +class DBovAudioLevelCalculator : AudioLevelCalculator { override fun calculateAudioLevel(buffer: ShortArray): Float { return buffer.rms().dBov().normalize().coerceIn(0f, 1f) } 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/VoiceRecorderModule.kt index d6e00eee7b..917ef14415 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/VoiceRecorderModule.kt @@ -39,7 +39,7 @@ object VoiceRecorderModule { } @Provides - fun provideVoiceFileConfig(): VoiceFileConfig = + public fun provideVoiceFileConfig(): VoiceFileConfig = VoiceFileConfig( cacheSubdir = "voice_recordings", fileExt = "ogg", diff --git a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt index e55a930660..f43367c66a 100644 --- a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt +++ b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopAnalyticsService.kt @@ -23,7 +23,7 @@ import kotlinx.coroutines.flow.flowOf @SingleIn(AppScope::class) @ContributesBinding(AppScope::class) @Inject -class NoopAnalyticsService() : AnalyticsService { +class NoopAnalyticsService : AnalyticsService { override fun getAvailableAnalyticsProviders(): Set = emptySet() override val userConsentFlow: Flow = flowOf(false) override suspend fun setUserConsent(userConsent: Boolean) = Unit diff --git a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt index 2180ae69d3..fb193e115d 100644 --- a/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt +++ b/services/analytics/noop/src/main/kotlin/io/element/android/services/analytics/noop/NoopScreenTracker.kt @@ -16,7 +16,7 @@ import io.element.android.services.analytics.api.ScreenTracker @ContributesBinding(AppScope::class) @Inject -class NoopScreenTracker() : ScreenTracker { +class NoopScreenTracker : ScreenTracker { @Composable override fun TrackScreen(screen: MobileScreen.ScreenName) = Unit } diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt index 8d6c489750..75904f4dea 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/sdk/DefaultBuildVersionSdkIntProvider.kt @@ -15,7 +15,7 @@ import io.element.android.services.toolbox.api.sdk.BuildVersionSdkIntProvider @ContributesBinding(AppScope::class) @Inject -class DefaultBuildVersionSdkIntProvider() : +class DefaultBuildVersionSdkIntProvider : BuildVersionSdkIntProvider { override fun get() = Build.VERSION.SDK_INT } diff --git a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt index 00f48bfeea..74c5094868 100644 --- a/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt +++ b/services/toolbox/impl/src/main/kotlin/io/element/android/services/toolbox/impl/systemclock/DefaultSystemClock.kt @@ -14,7 +14,7 @@ import io.element.android.services.toolbox.api.systemclock.SystemClock @ContributesBinding(AppScope::class) @Inject -class DefaultSystemClock() : SystemClock { +class DefaultSystemClock : SystemClock { /** * Provides a UTC epoch in milliseconds * From 3c89f421255ac6b7f06105de0df181b6ec03e433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Thu, 4 Sep 2025 09:42:48 +0200 Subject: [PATCH 12/13] Revert removing enterprise submodule --- enterprise | 1 + 1 file changed, 1 insertion(+) create mode 160000 enterprise diff --git a/enterprise b/enterprise new file mode 160000 index 0000000000..76e10f6fa4 --- /dev/null +++ b/enterprise @@ -0,0 +1 @@ +Subproject commit 76e10f6fa4db4196df245a3d29131a95d9e60a4d From 33b7e2dd607e19bdca51b31c33d95db837680364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Mart=C3=ADn?= Date: Thu, 4 Sep 2025 10:05:03 +0200 Subject: [PATCH 13/13] Use the right commit for enterprise --- .gitmodules | 3 +++ enterprise | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index e69de29bb2..aa54a9d8ae 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "enterprise"] + path = enterprise + url = git@github.com:element-hq/element-android-enterprise.git diff --git a/enterprise b/enterprise index 76e10f6fa4..95789d4011 160000 --- a/enterprise +++ b/enterprise @@ -1 +1 @@ -Subproject commit 76e10f6fa4db4196df245a3d29131a95d9e60a4d +Subproject commit 95789d40119499eba8a79284df9dd2306405b099