diff --git a/app/src/main/java/org/greenstand/android/TreeTracker/application/TreeTrackerApplication.kt b/app/src/main/java/org/greenstand/android/TreeTracker/application/TreeTrackerApplication.kt index cbb73d28c..ec04a45f7 100644 --- a/app/src/main/java/org/greenstand/android/TreeTracker/application/TreeTrackerApplication.kt +++ b/app/src/main/java/org/greenstand/android/TreeTracker/application/TreeTrackerApplication.kt @@ -21,9 +21,7 @@ import androidx.multidex.MultiDex import com.google.firebase.FirebaseApp import org.greenstand.android.TreeTracker.analytics.ExceptionLogger import org.greenstand.android.TreeTracker.api.ObjectStorageClient -import org.greenstand.android.TreeTracker.di.appModule -import org.greenstand.android.TreeTracker.di.networkModule -import org.greenstand.android.TreeTracker.di.roomModule +import org.greenstand.android.TreeTracker.di.appModules import org.greenstand.android.TreeTracker.models.FeatureFlags import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger @@ -44,11 +42,7 @@ class TreeTrackerApplication : Application() { // androidLogger() androidLogger(Level.NONE) androidContext(applicationContext) - modules( - appModule, - roomModule, - networkModule, - ) + modules(appModules) } if (FeatureFlags.DEBUG_ENABLED) { diff --git a/app/src/main/java/org/greenstand/android/TreeTracker/di/AppModule.kt b/app/src/main/java/org/greenstand/android/TreeTracker/di/AppModule.kt index e70a9f09d..8c1df6213 100644 --- a/app/src/main/java/org/greenstand/android/TreeTracker/di/AppModule.kt +++ b/app/src/main/java/org/greenstand/android/TreeTracker/di/AppModule.kt @@ -15,262 +15,12 @@ */ package org.greenstand.android.TreeTracker.di -import android.content.Context -import android.hardware.SensorManager -import android.location.LocationManager -import androidx.core.app.NotificationManagerCompat -import androidx.core.content.ContextCompat -import androidx.work.WorkManager -import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.crashlytics.ktx.crashlytics -import com.google.firebase.ktx.Firebase -import com.google.firebase.remoteconfig.FirebaseRemoteConfig -import kotlinx.serialization.json.Json -import org.greenstand.android.TreeTracker.analytics.Analytics -import org.greenstand.android.TreeTracker.analytics.ExceptionDataCollector -import org.greenstand.android.TreeTracker.api.ObjectStorageClient -import org.greenstand.android.TreeTracker.background.SyncNotificationManager -import org.greenstand.android.TreeTracker.capture.TreeImageReviewViewModel -import org.greenstand.android.TreeTracker.dashboard.DashboardViewModel -import org.greenstand.android.TreeTracker.dashboard.TreesToSyncHelper -import org.greenstand.android.TreeTracker.devoptions.Configurator -import org.greenstand.android.TreeTracker.devoptions.DevOptionsViewModel -import org.greenstand.android.TreeTracker.languagepicker.LanguagePickerViewModel -import org.greenstand.android.TreeTracker.map.MapViewModel -import org.greenstand.android.TreeTracker.messages.ChatViewModel -import org.greenstand.android.TreeTracker.messages.announcementmessage.AnnouncementViewModel -import org.greenstand.android.TreeTracker.messages.individualmeassagelist.IndividualMessageListViewModel -import org.greenstand.android.TreeTracker.models.ConvergenceConfiguration -import org.greenstand.android.TreeTracker.models.DeviceConfigUpdater -import org.greenstand.android.TreeTracker.models.DeviceConfigUploader -import org.greenstand.android.TreeTracker.models.DeviceOrientation -import org.greenstand.android.TreeTracker.models.FeatureFlags -import org.greenstand.android.TreeTracker.models.LanguageSwitcher -import org.greenstand.android.TreeTracker.models.PlanterUploader -import org.greenstand.android.TreeTracker.models.SessionTracker -import org.greenstand.android.TreeTracker.models.SessionUploader -import org.greenstand.android.TreeTracker.models.StepCounter -import org.greenstand.android.TreeTracker.models.TreeCapturer -import org.greenstand.android.TreeTracker.models.TreeTrackerViewModelFactory -import org.greenstand.android.TreeTracker.models.TreeUploader -import org.greenstand.android.TreeTracker.models.UserRepo -import org.greenstand.android.TreeTracker.models.captureflowdata.CaptureFlowData -import org.greenstand.android.TreeTracker.models.captureflowdata.CaptureFlowScope -import org.greenstand.android.TreeTracker.models.captureflowdata.CaptureFlowScopeManager -import org.greenstand.android.TreeTracker.models.location.LocationDataCapturer -import org.greenstand.android.TreeTracker.models.location.LocationUpdateManager -import org.greenstand.android.TreeTracker.models.messages.MessageUploader -import org.greenstand.android.TreeTracker.models.messages.MessagesRepo -import org.greenstand.android.TreeTracker.models.organization.OrgConfigProvider -import org.greenstand.android.TreeTracker.models.organization.OrgRepo -import org.greenstand.android.TreeTracker.models.setupflow.CaptureSetupData -import org.greenstand.android.TreeTracker.models.setupflow.CaptureSetupScope -import org.greenstand.android.TreeTracker.navigation.CaptureFlowNavigationController -import org.greenstand.android.TreeTracker.navigation.CaptureSetupNavigationController -import org.greenstand.android.TreeTracker.orgpicker.AddOrgViewModel -import org.greenstand.android.TreeTracker.orgpicker.OrgPickerViewModel -import org.greenstand.android.TreeTracker.overlay.DebugOverlayManager -import org.greenstand.android.TreeTracker.overlay.NoOpSyncProgressTracker -import org.greenstand.android.TreeTracker.overlay.SensorDiagnosticsTracker -import org.greenstand.android.TreeTracker.overlay.SyncProgressTracker -import org.greenstand.android.TreeTracker.permissions.PermissionViewModel -import org.greenstand.android.TreeTracker.preferences.Preferences -import org.greenstand.android.TreeTracker.sessionnote.SessionNoteViewModel -import org.greenstand.android.TreeTracker.settings.SettingsViewModel -import org.greenstand.android.TreeTracker.treeheight.TreeHeightSelectionViewModel -import org.greenstand.android.TreeTracker.usecases.CheckForInternetUseCase -import org.greenstand.android.TreeTracker.usecases.CreateFakeTreesUseCase -import org.greenstand.android.TreeTracker.usecases.CreateLegacyTreeUseCase -import org.greenstand.android.TreeTracker.usecases.CreateTreeRequestUseCase -import org.greenstand.android.TreeTracker.usecases.CreateTreeUseCase -import org.greenstand.android.TreeTracker.usecases.SyncDataUseCase -import org.greenstand.android.TreeTracker.usecases.UploadImageUseCase -import org.greenstand.android.TreeTracker.usecases.UploadLocationDataUseCase -import org.greenstand.android.TreeTracker.userselect.UserSelectViewModel -import org.greenstand.android.TreeTracker.utilities.DeviceUtils -import org.greenstand.android.TreeTracker.utilities.GpsUtils -import org.greenstand.android.TreeTracker.utilities.TimeProvider -import org.greenstand.android.TreeTracker.walletselect.WalletSelectViewModel -import org.greenstand.android.TreeTracker.walletselect.addwallet.AddWalletViewModel -import org.koin.android.ext.koin.androidContext -import org.koin.androidx.viewmodel.dsl.viewModel -import org.koin.core.component.get -import org.koin.dsl.module - -val appModule = - module { - - viewModel { SessionNoteViewModel() } - - viewModel { AddWalletViewModel() } - - viewModel { AddOrgViewModel(get(), get()) } - - viewModel { LanguagePickerViewModel(get()) } - - viewModel { DashboardViewModel(get(), get(), get(), get(), get(), get(), get(), get()) } - - viewModel { OrgPickerViewModel(get()) } - - viewModel { UserSelectViewModel(null, get(), get(), get(), get()) } - - viewModel { DevOptionsViewModel(get(), get()) } - - viewModel { TreeHeightSelectionViewModel(get()) } - - viewModel { - org.greenstand.android.TreeTracker.signup - .SignupViewModel(get(), get()) - } - - viewModel { WalletSelectViewModel(get()) } - - viewModel { IndividualMessageListViewModel(get(), get(), get()) } - - viewModel { ChatViewModel(get(), get(), get(), get()) } - - viewModel { AnnouncementViewModel(get(), get()) } - - viewModel { TreeImageReviewViewModel(get(), get(), get()) } - - viewModel { PermissionViewModel(get()) } - - viewModel { SettingsViewModel(get()) } - - viewModel { MapViewModel(get()) } - - single { UserRepo(get(), get(), get(), get(), get(), get()) } - - factory { CaptureFlowScopeManager.getData().get() } - - single { Configurator(get()) } - - single { DeviceConfigUpdater(get(), get()) } - - single { OrgRepo(get(), get(), get()) } - - single { - org.greenstand.android.TreeTracker.models.organization - .FeatureResolver(get()) - } - - single { WorkManager.getInstance(get()) } - - single { FirebaseAnalytics.getInstance(get()) } - - single { Analytics(get(), get()) } - - single { DeviceUtils } - - single { GpsUtils(get()) } - - single { SyncNotificationManager(get()) } - - single { androidContext().getSharedPreferences("org.greenstand.android", Context.MODE_PRIVATE) } - - single { androidContext().getSystemService(Context.LOCATION_SERVICE) as LocationManager } - - single { androidContext().resources } - - single { MessagesRepo(get(), get(), get(), get(), get()) } - - factory { MessageUploader(get(), get(), get()) } - - single { LocationUpdateManager(get(), get(), get()) } - - single { ObjectStorageClient.instance() } - - single { NotificationManagerCompat.from(get()) } - - single { - LocationDataCapturer( - get(), - get(), - get(), - get(), - get(), - get(), - ) - } - - single { Preferences(get()) } - - single { - ContextCompat.getSystemService(androidContext(), SensorManager::class.java) as SensorManager - } - - single { SessionTracker(get(), get(), get(), get(), get(), get()) } - - single { StepCounter(get(), get()) } - - single { DeviceOrientation(get()) } - - single { ConvergenceConfiguration(get()) } - - single { - Json { - explicitNulls = true - ignoreUnknownKeys = true - encodeDefaults = true - } - } - - single { TreeTrackerViewModelFactory() } - - single { - if (FeatureFlags.DEBUG_ENABLED) SyncProgressTracker() else NoOpSyncProgressTracker() - } - - single { DebugOverlayManager() } - - single { SensorDiagnosticsTracker(get(), get(), get(), get(), get()) } - - single { ExceptionDataCollector(get()) } - - factory { TimeProvider(get()) } - - factory { TreesToSyncHelper(get(), get()) } - - factory { PlanterUploader(get(), get(), get(), get()) } - - factory { SessionUploader(get(), get(), get()) } - - factory { DeviceConfigUploader(get(), get(), get()) } - - factory { LanguageSwitcher(get()) } - - factory { UploadImageUseCase(get()) } - - factory { UploadLocationDataUseCase(get(), get()) } - - factory { CreateTreeUseCase(get(), get(), get()) } - - factory { CreateLegacyTreeUseCase(get(), get()) } - - factory { CreateFakeTreesUseCase(get(), get(), get(), get(), get(), get(), get()) } - - factory { CheckForInternetUseCase() } - - factory { CreateTreeRequestUseCase(get()) } - - factory { TreeUploader(get(), get(), get(), get(), get()) } - - factory { SyncDataUseCase(get(), get(), get(), get(), get(), get(), get(), get()) } - - factory { Firebase.crashlytics } - - single { FirebaseRemoteConfig.getInstance() } - - single { OrgConfigProvider(get()) } - - scope { - scoped { CaptureSetupData(get()) } - scoped { CaptureSetupNavigationController(get(), get(), get(), get(), get()) } - } - - scope { - scoped { CaptureFlowData() } - scoped { CaptureFlowNavigationController(get(), get(), get(), get(), get(), get()) } - scoped { TreeCapturer(get(), get(), get(), get(), get()) } - } - } \ No newline at end of file +val appModules = + listOf( + viewModelModule, + useCaseModule, + repositoryModule, + utilityModule, + roomModule, + networkModule, + ) \ No newline at end of file diff --git a/app/src/main/java/org/greenstand/android/TreeTracker/di/RepositoryModule.kt b/app/src/main/java/org/greenstand/android/TreeTracker/di/RepositoryModule.kt new file mode 100644 index 000000000..521d39044 --- /dev/null +++ b/app/src/main/java/org/greenstand/android/TreeTracker/di/RepositoryModule.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2023 Treetracker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.greenstand.android.TreeTracker.di + +import org.greenstand.android.TreeTracker.api.ObjectStorageClient +import org.greenstand.android.TreeTracker.models.DeviceConfigUploader +import org.greenstand.android.TreeTracker.models.PlanterUploader +import org.greenstand.android.TreeTracker.models.SessionUploader +import org.greenstand.android.TreeTracker.models.TreeUploader +import org.greenstand.android.TreeTracker.models.UserRepo +import org.greenstand.android.TreeTracker.models.location.LocationDataCapturer +import org.greenstand.android.TreeTracker.models.location.LocationUpdateManager +import org.greenstand.android.TreeTracker.models.messages.MessageUploader +import org.greenstand.android.TreeTracker.models.messages.MessagesRepo +import org.greenstand.android.TreeTracker.models.organization.FeatureResolver +import org.greenstand.android.TreeTracker.models.organization.OrgConfigProvider +import org.greenstand.android.TreeTracker.models.organization.OrgRepo +import org.koin.dsl.module + +val repositoryModule = + module { + + single { UserRepo(get(), get(), get(), get(), get(), get()) } + + single { OrgRepo(get(), get(), get()) } + + single { FeatureResolver(get()) } + + single { MessagesRepo(get(), get(), get(), get(), get()) } + + factory { MessageUploader(get(), get(), get()) } + + single { LocationUpdateManager(get(), get(), get()) } + + single { ObjectStorageClient.instance() } + + single { + LocationDataCapturer( + get(), + get(), + get(), + get(), + get(), + get(), + ) + } + + factory { PlanterUploader(get(), get(), get(), get()) } + + factory { SessionUploader(get(), get(), get()) } + + factory { DeviceConfigUploader(get(), get(), get()) } + + factory { TreeUploader(get(), get(), get(), get(), get()) } + + single { OrgConfigProvider(get()) } + } \ No newline at end of file diff --git a/app/src/main/java/org/greenstand/android/TreeTracker/di/UseCaseModule.kt b/app/src/main/java/org/greenstand/android/TreeTracker/di/UseCaseModule.kt new file mode 100644 index 000000000..4d70ee0b9 --- /dev/null +++ b/app/src/main/java/org/greenstand/android/TreeTracker/di/UseCaseModule.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2023 Treetracker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.greenstand.android.TreeTracker.di + +import org.greenstand.android.TreeTracker.usecases.CheckForInternetUseCase +import org.greenstand.android.TreeTracker.usecases.CreateFakeTreesUseCase +import org.greenstand.android.TreeTracker.usecases.CreateLegacyTreeUseCase +import org.greenstand.android.TreeTracker.usecases.CreateTreeRequestUseCase +import org.greenstand.android.TreeTracker.usecases.CreateTreeUseCase +import org.greenstand.android.TreeTracker.usecases.SyncDataUseCase +import org.greenstand.android.TreeTracker.usecases.UploadImageUseCase +import org.greenstand.android.TreeTracker.usecases.UploadLocationDataUseCase +import org.koin.dsl.module + +val useCaseModule = + module { + + factory { UploadImageUseCase(get()) } + + factory { UploadLocationDataUseCase(get(), get()) } + + factory { CreateTreeUseCase(get(), get(), get()) } + + factory { CreateLegacyTreeUseCase(get(), get()) } + + factory { CreateFakeTreesUseCase(get(), get(), get(), get(), get(), get(), get()) } + + factory { CheckForInternetUseCase() } + + factory { CreateTreeRequestUseCase(get()) } + + factory { SyncDataUseCase(get(), get(), get(), get(), get(), get(), get(), get()) } + } \ No newline at end of file diff --git a/app/src/main/java/org/greenstand/android/TreeTracker/di/UtilityModule.kt b/app/src/main/java/org/greenstand/android/TreeTracker/di/UtilityModule.kt new file mode 100644 index 000000000..4640090ec --- /dev/null +++ b/app/src/main/java/org/greenstand/android/TreeTracker/di/UtilityModule.kt @@ -0,0 +1,145 @@ +/* + * Copyright 2023 Treetracker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.greenstand.android.TreeTracker.di + +import android.content.Context +import android.hardware.SensorManager +import android.location.LocationManager +import androidx.core.app.NotificationManagerCompat +import androidx.core.content.ContextCompat +import androidx.work.WorkManager +import com.google.firebase.analytics.FirebaseAnalytics +import com.google.firebase.crashlytics.ktx.crashlytics +import com.google.firebase.ktx.Firebase +import com.google.firebase.remoteconfig.FirebaseRemoteConfig +import kotlinx.serialization.json.Json +import org.greenstand.android.TreeTracker.analytics.Analytics +import org.greenstand.android.TreeTracker.analytics.ExceptionDataCollector +import org.greenstand.android.TreeTracker.background.SyncNotificationManager +import org.greenstand.android.TreeTracker.dashboard.TreesToSyncHelper +import org.greenstand.android.TreeTracker.devoptions.Configurator +import org.greenstand.android.TreeTracker.models.ConvergenceConfiguration +import org.greenstand.android.TreeTracker.models.DeviceConfigUpdater +import org.greenstand.android.TreeTracker.models.DeviceOrientation +import org.greenstand.android.TreeTracker.models.FeatureFlags +import org.greenstand.android.TreeTracker.models.LanguageSwitcher +import org.greenstand.android.TreeTracker.models.SessionTracker +import org.greenstand.android.TreeTracker.models.StepCounter +import org.greenstand.android.TreeTracker.models.TreeCapturer +import org.greenstand.android.TreeTracker.models.TreeTrackerViewModelFactory +import org.greenstand.android.TreeTracker.models.captureflowdata.CaptureFlowData +import org.greenstand.android.TreeTracker.models.captureflowdata.CaptureFlowScope +import org.greenstand.android.TreeTracker.models.captureflowdata.CaptureFlowScopeManager +import org.greenstand.android.TreeTracker.models.setupflow.CaptureSetupData +import org.greenstand.android.TreeTracker.models.setupflow.CaptureSetupScope +import org.greenstand.android.TreeTracker.navigation.CaptureFlowNavigationController +import org.greenstand.android.TreeTracker.navigation.CaptureSetupNavigationController +import org.greenstand.android.TreeTracker.overlay.DebugOverlayManager +import org.greenstand.android.TreeTracker.overlay.NoOpSyncProgressTracker +import org.greenstand.android.TreeTracker.overlay.SensorDiagnosticsTracker +import org.greenstand.android.TreeTracker.overlay.SyncProgressTracker +import org.greenstand.android.TreeTracker.preferences.Preferences +import org.greenstand.android.TreeTracker.utilities.DeviceUtils +import org.greenstand.android.TreeTracker.utilities.GpsUtils +import org.greenstand.android.TreeTracker.utilities.TimeProvider +import org.koin.android.ext.koin.androidContext +import org.koin.core.component.get +import org.koin.dsl.module + +val utilityModule = + module { + + factory { CaptureFlowScopeManager.getData().get() } + + single { Configurator(get()) } + + single { DeviceConfigUpdater(get(), get()) } + + single { WorkManager.getInstance(get()) } + + single { FirebaseAnalytics.getInstance(get()) } + + single { Analytics(get(), get()) } + + single { DeviceUtils } + + single { GpsUtils(get()) } + + single { SyncNotificationManager(get()) } + + single { androidContext().getSharedPreferences("org.greenstand.android", Context.MODE_PRIVATE) } + + single { androidContext().getSystemService(Context.LOCATION_SERVICE) as LocationManager } + + single { androidContext().resources } + + single { NotificationManagerCompat.from(get()) } + + single { Preferences(get()) } + + single { + ContextCompat.getSystemService(androidContext(), SensorManager::class.java) as SensorManager + } + + single { SessionTracker(get(), get(), get(), get(), get(), get()) } + + single { StepCounter(get(), get()) } + + single { DeviceOrientation(get()) } + + single { ConvergenceConfiguration(get()) } + + single { + Json { + explicitNulls = true + ignoreUnknownKeys = true + encodeDefaults = true + } + } + + single { TreeTrackerViewModelFactory() } + + single { + if (FeatureFlags.DEBUG_ENABLED) SyncProgressTracker() else NoOpSyncProgressTracker() + } + + single { DebugOverlayManager() } + + single { SensorDiagnosticsTracker(get(), get(), get(), get(), get()) } + + single { ExceptionDataCollector(get()) } + + factory { TimeProvider(get()) } + + factory { TreesToSyncHelper(get(), get()) } + + factory { LanguageSwitcher(get()) } + + factory { Firebase.crashlytics } + + single { FirebaseRemoteConfig.getInstance() } + + scope { + scoped { CaptureSetupData(get()) } + scoped { CaptureSetupNavigationController(get(), get(), get(), get(), get()) } + } + + scope { + scoped { CaptureFlowData() } + scoped { CaptureFlowNavigationController(get(), get(), get(), get(), get(), get()) } + scoped { TreeCapturer(get(), get(), get(), get(), get()) } + } + } \ No newline at end of file diff --git a/app/src/main/java/org/greenstand/android/TreeTracker/di/ViewModelModule.kt b/app/src/main/java/org/greenstand/android/TreeTracker/di/ViewModelModule.kt new file mode 100644 index 000000000..337a99097 --- /dev/null +++ b/app/src/main/java/org/greenstand/android/TreeTracker/di/ViewModelModule.kt @@ -0,0 +1,77 @@ +/* + * Copyright 2023 Treetracker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.greenstand.android.TreeTracker.di + +import org.greenstand.android.TreeTracker.capture.TreeImageReviewViewModel +import org.greenstand.android.TreeTracker.dashboard.DashboardViewModel +import org.greenstand.android.TreeTracker.devoptions.DevOptionsViewModel +import org.greenstand.android.TreeTracker.languagepicker.LanguagePickerViewModel +import org.greenstand.android.TreeTracker.map.MapViewModel +import org.greenstand.android.TreeTracker.messages.ChatViewModel +import org.greenstand.android.TreeTracker.messages.announcementmessage.AnnouncementViewModel +import org.greenstand.android.TreeTracker.messages.individualmeassagelist.IndividualMessageListViewModel +import org.greenstand.android.TreeTracker.orgpicker.AddOrgViewModel +import org.greenstand.android.TreeTracker.orgpicker.OrgPickerViewModel +import org.greenstand.android.TreeTracker.permissions.PermissionViewModel +import org.greenstand.android.TreeTracker.sessionnote.SessionNoteViewModel +import org.greenstand.android.TreeTracker.settings.SettingsViewModel +import org.greenstand.android.TreeTracker.signup.SignupViewModel +import org.greenstand.android.TreeTracker.treeheight.TreeHeightSelectionViewModel +import org.greenstand.android.TreeTracker.userselect.UserSelectViewModel +import org.greenstand.android.TreeTracker.walletselect.WalletSelectViewModel +import org.greenstand.android.TreeTracker.walletselect.addwallet.AddWalletViewModel +import org.koin.androidx.viewmodel.dsl.viewModel +import org.koin.dsl.module + +val viewModelModule = + module { + + viewModel { SessionNoteViewModel() } + + viewModel { AddWalletViewModel() } + + viewModel { AddOrgViewModel(get(), get()) } + + viewModel { LanguagePickerViewModel(get()) } + + viewModel { DashboardViewModel(get(), get(), get(), get(), get(), get(), get(), get()) } + + viewModel { OrgPickerViewModel(get()) } + + viewModel { UserSelectViewModel(null, get(), get(), get(), get()) } + + viewModel { DevOptionsViewModel(get(), get()) } + + viewModel { TreeHeightSelectionViewModel(get()) } + + viewModel { SignupViewModel(get(), get()) } + + viewModel { WalletSelectViewModel(get()) } + + viewModel { IndividualMessageListViewModel(get(), get(), get()) } + + viewModel { ChatViewModel(get(), get(), get(), get()) } + + viewModel { AnnouncementViewModel(get(), get()) } + + viewModel { TreeImageReviewViewModel(get(), get(), get()) } + + viewModel { PermissionViewModel(get()) } + + viewModel { SettingsViewModel(get()) } + + viewModel { MapViewModel(get()) } + } \ No newline at end of file diff --git a/docs/tasks/task_17/README.md b/docs/tasks/task_17/README.md new file mode 100644 index 000000000..2cfcae96c --- /dev/null +++ b/docs/tasks/task_17/README.md @@ -0,0 +1,14 @@ +# Task 17: Split AppModule DI Definitions + +## Summary +Split the monolithic Koin DI module into focused modules while keeping Room and Network modules intact. + +## Files Modified +- `app/src/main/java/org/greenstand/android/TreeTracker/di/AppModule.kt` - replaced monolithic module with root `appModules` list +- `app/src/main/java/org/greenstand/android/TreeTracker/application/TreeTrackerApplication.kt` - registers the root module list + +## Files Created +- `app/src/main/java/org/greenstand/android/TreeTracker/di/ViewModelModule.kt` +- `app/src/main/java/org/greenstand/android/TreeTracker/di/UseCaseModule.kt` +- `app/src/main/java/org/greenstand/android/TreeTracker/di/RepositoryModule.kt` +- `app/src/main/java/org/greenstand/android/TreeTracker/di/UtilityModule.kt`