package mx.trackermap.TrackerMap.android import android.app.Application import androidx.preference.PreferenceManager import kotlinx.coroutines.DelicateCoroutinesApi import mx.trackermap.TrackerMap.android.details.commands.UnitCommandsViewModel import mx.trackermap.TrackerMap.android.details.information.UnitInformationViewModel import mx.trackermap.TrackerMap.android.details.reports.UnitReportsViewModel import mx.trackermap.TrackerMap.android.session.LoginViewModel import mx.trackermap.TrackerMap.android.session.UserInformationViewModel import mx.trackermap.TrackerMap.android.units.UnitsViewModel import mx.trackermap.TrackerMap.client.apis.* import mx.trackermap.TrackerMap.controllers.GeofencesController import mx.trackermap.TrackerMap.controllers.ReportController import mx.trackermap.TrackerMap.controllers.SessionController import mx.trackermap.TrackerMap.controllers.UnitsController import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger import org.koin.androidx.viewmodel.dsl.viewModel import org.koin.core.context.startKoin import org.koin.core.logger.Level import org.koin.dsl.module import kotlin.time.ExperimentalTime @DelicateCoroutinesApi @ExperimentalTime open class TrackerApp : Application() { override fun onCreate() { super.onCreate() val appModule = module { single { getString(R.string.default_server_url) } factory { SessionApi(get()) } factory { UsersApi(get()) } factory { DevicesApi(get()) } factory { PositionsApi(get()) } factory { CommandsApi(get()) } factory { ReportsApi(get()) } factory { GeofencesApi(get()) } factory { SessionController(get(), get()) } factory { UnitsController(get(), get()) } factory { GeofencesController(get()) } factory { ReportController(get(), get()) } viewModel { LoginViewModel() } viewModel { UnitInformationViewModel(get()) } viewModel { UnitCommandsViewModel(get()) } viewModel { UnitsViewModel(get()) } viewModel { UnitReportsViewModel(get()) } viewModel { UserInformationViewModel() } } startKoin { androidLogger(Level.ERROR) androidContext(this@TrackerApp) modules(appModule) } } }