From e96b305c6e123c7a6dff6cd3254df1d1d2ab98b6 Mon Sep 17 00:00:00 2001 From: rushiiMachine <33725716+rushiiMachine@users.noreply.github.com> Date: Fri, 12 Jan 2024 14:28:34 -0800 Subject: [PATCH] refactor(DI): clean up module structure --- .../aliucord/manager/ManagerApplication.kt | 43 ++++++++++++++++- .../kotlin/com/aliucord/manager/di/Http.kt | 42 +++++++++++++++++ .../com/aliucord/manager/di/HttpModule.kt | 46 ------------------- .../com/aliucord/manager/di/ManagerModule.kt | 19 -------- .../com/aliucord/manager/di/Managers.kt | 19 ++++++++ .../aliucord/manager/di/RepositoryModule.kt | 11 ----- .../com/aliucord/manager/di/ServiceModule.kt | 11 ----- .../aliucord/manager/di/ViewModelModule.kt | 15 ------ 8 files changed, 103 insertions(+), 103 deletions(-) create mode 100644 app/src/main/kotlin/com/aliucord/manager/di/Http.kt delete mode 100644 app/src/main/kotlin/com/aliucord/manager/di/HttpModule.kt delete mode 100644 app/src/main/kotlin/com/aliucord/manager/di/ManagerModule.kt create mode 100644 app/src/main/kotlin/com/aliucord/manager/di/Managers.kt delete mode 100644 app/src/main/kotlin/com/aliucord/manager/di/RepositoryModule.kt delete mode 100644 app/src/main/kotlin/com/aliucord/manager/di/ServiceModule.kt delete mode 100644 app/src/main/kotlin/com/aliucord/manager/di/ViewModelModule.kt diff --git a/app/src/main/kotlin/com/aliucord/manager/ManagerApplication.kt b/app/src/main/kotlin/com/aliucord/manager/ManagerApplication.kt index de091f4..dd0c198 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ManagerApplication.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ManagerApplication.kt @@ -2,8 +2,15 @@ package com.aliucord.manager import android.app.Application import com.aliucord.manager.di.* +import com.aliucord.manager.domain.repository.AliucordMavenRepository +import com.aliucord.manager.domain.repository.GithubRepository +import com.aliucord.manager.network.service.* +import com.aliucord.manager.ui.viewmodel.* import org.koin.android.ext.koin.androidContext +import org.koin.androidx.viewmodel.dsl.viewModelOf import org.koin.core.context.startKoin +import org.koin.core.module.dsl.singleOf +import org.koin.dsl.module class ManagerApplication : Application() { override fun onCreate() { @@ -11,7 +18,41 @@ class ManagerApplication : Application() { startKoin { androidContext(this@ManagerApplication) - modules(httpModule, serviceModule, repositoryModule, viewModelModule, managerModule) + + // HTTP + module { + singleOf(::provideJson) + singleOf(::provideHttpClient) + } + + // Services + module { + singleOf(::GithubService) + singleOf(::MavenService) + singleOf(::AliucordGithubService) + } + + // Repositories + module { + singleOf(::GithubRepository) + singleOf(::AliucordMavenRepository) + } + + // ViewModels + module { + viewModelOf(::HomeViewModel) + viewModelOf(::PluginsViewModel) + viewModelOf(::AboutViewModel) + viewModelOf(::InstallViewModel) + viewModelOf(::SettingsViewModel) + viewModelOf(::UpdaterViewModel) + } + + // Managers + module { + singleOf(::providePreferences) + singleOf(::provideDownloadManager) + } } } } diff --git a/app/src/main/kotlin/com/aliucord/manager/di/Http.kt b/app/src/main/kotlin/com/aliucord/manager/di/Http.kt new file mode 100644 index 0000000..9943563 --- /dev/null +++ b/app/src/main/kotlin/com/aliucord/manager/di/Http.kt @@ -0,0 +1,42 @@ +package com.aliucord.manager.di + +import io.ktor.client.HttpClient +import io.ktor.client.engine.okhttp.OkHttp +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.serialization.kotlinx.json.json +import kotlinx.serialization.json.Json +import okhttp3.Dns +import org.koin.core.scope.Scope +import java.net.Inet4Address +import java.net.InetAddress + +context(Scope) +fun provideJson() = Json { + ignoreUnknownKeys = true +} + +context(Scope) +fun provideHttpClient() = HttpClient(OkHttp) { + val json: Json = get() + + engine { + config { + dns(object : Dns { + override fun lookup(hostname: String): List { + val addresses = Dns.SYSTEM.lookup(hostname) + + // Github's nameservers do not respond to IPv6 requests for raw.githubusercontent.com, + // which causes CIO, Android and OkHTTP to all hang + return if (hostname == "raw.githubusercontent.com") { + addresses.filterIsInstance() + } else { + addresses + } + } + }) + } + } + install(ContentNegotiation) { + json(json) + } +} diff --git a/app/src/main/kotlin/com/aliucord/manager/di/HttpModule.kt b/app/src/main/kotlin/com/aliucord/manager/di/HttpModule.kt deleted file mode 100644 index 11e72c8..0000000 --- a/app/src/main/kotlin/com/aliucord/manager/di/HttpModule.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.aliucord.manager.di - -import com.aliucord.manager.network.service.HttpService -import io.ktor.client.* -import io.ktor.client.engine.okhttp.* -import io.ktor.client.plugins.contentnegotiation.* -import io.ktor.serialization.kotlinx.json.* -import kotlinx.serialization.json.Json -import okhttp3.Dns -import org.koin.core.module.dsl.singleOf -import org.koin.dsl.module -import java.net.Inet4Address -import java.net.InetAddress - -val httpModule = module { - fun provideJson() = Json { - ignoreUnknownKeys = true - } - - fun provideHttpClient(json: Json) = HttpClient(OkHttp) { - engine { - config { - dns(object : Dns { - override fun lookup(hostname: String): List { - val addresses = Dns.SYSTEM.lookup(hostname) - - // Github's nameservers do not respond to IPv6 requests for raw.githubusercontent.com, - // which causes CIO, Android and OkHTTP to all hang - return if (hostname == "raw.githubusercontent.com") { - addresses.filterIsInstance() - } else { - addresses - } - } - }) - } - } - install(ContentNegotiation) { - json(json) - } - } - - singleOf(::provideJson) - singleOf(::provideHttpClient) - singleOf(::HttpService) -} diff --git a/app/src/main/kotlin/com/aliucord/manager/di/ManagerModule.kt b/app/src/main/kotlin/com/aliucord/manager/di/ManagerModule.kt deleted file mode 100644 index efe7655..0000000 --- a/app/src/main/kotlin/com/aliucord/manager/di/ManagerModule.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.aliucord.manager.di - -import android.app.Application -import android.content.Context -import com.aliucord.manager.domain.manager.DownloadManager -import com.aliucord.manager.domain.manager.PreferencesManager -import org.koin.core.module.dsl.singleOf -import org.koin.dsl.module - -val managerModule = module { - fun providePreferences(context: Context): PreferencesManager { - return PreferencesManager(context.getSharedPreferences("preferences", Context.MODE_PRIVATE)) - } - - fun provideDownloadManager(application: Application) = DownloadManager(application) - - singleOf(::providePreferences) - singleOf(::provideDownloadManager) -} diff --git a/app/src/main/kotlin/com/aliucord/manager/di/Managers.kt b/app/src/main/kotlin/com/aliucord/manager/di/Managers.kt new file mode 100644 index 0000000..f94ec3b --- /dev/null +++ b/app/src/main/kotlin/com/aliucord/manager/di/Managers.kt @@ -0,0 +1,19 @@ +package com.aliucord.manager.di + +import android.app.Application +import android.content.Context +import com.aliucord.manager.domain.manager.DownloadManager +import com.aliucord.manager.domain.manager.PreferencesManager +import org.koin.core.scope.Scope + +context(Scope) +fun providePreferences(): PreferencesManager { + val ctx: Context = get() + return PreferencesManager(ctx.getSharedPreferences("preferences", Context.MODE_PRIVATE)) +} + +context(Scope) +fun provideDownloadManager(): DownloadManager { + val application: Application = get() + return DownloadManager(application) +} diff --git a/app/src/main/kotlin/com/aliucord/manager/di/RepositoryModule.kt b/app/src/main/kotlin/com/aliucord/manager/di/RepositoryModule.kt deleted file mode 100644 index 8f06217..0000000 --- a/app/src/main/kotlin/com/aliucord/manager/di/RepositoryModule.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.aliucord.manager.di - -import com.aliucord.manager.domain.repository.AliucordMavenRepository -import com.aliucord.manager.domain.repository.GithubRepository -import org.koin.core.module.dsl.singleOf -import org.koin.dsl.module - -val repositoryModule = module { - singleOf(::GithubRepository) - singleOf(::AliucordMavenRepository) -} diff --git a/app/src/main/kotlin/com/aliucord/manager/di/ServiceModule.kt b/app/src/main/kotlin/com/aliucord/manager/di/ServiceModule.kt deleted file mode 100644 index 909eaa9..0000000 --- a/app/src/main/kotlin/com/aliucord/manager/di/ServiceModule.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.aliucord.manager.di - -import com.aliucord.manager.network.service.* -import org.koin.core.module.dsl.singleOf -import org.koin.dsl.module - -val serviceModule = module { - singleOf(::GithubService) - singleOf(::MavenService) - singleOf(::AliucordGithubService) -} diff --git a/app/src/main/kotlin/com/aliucord/manager/di/ViewModelModule.kt b/app/src/main/kotlin/com/aliucord/manager/di/ViewModelModule.kt deleted file mode 100644 index bea049c..0000000 --- a/app/src/main/kotlin/com/aliucord/manager/di/ViewModelModule.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.aliucord.manager.di - -import com.aliucord.manager.ui.viewmodel.* -import org.koin.androidx.viewmodel.dsl.viewModel -import org.koin.androidx.viewmodel.dsl.viewModelOf -import org.koin.dsl.module - -val viewModelModule = module { - viewModelOf(::HomeViewModel) - viewModelOf(::PluginsViewModel) - viewModelOf(::AboutViewModel) - viewModelOf(::InstallViewModel) - viewModelOf(::SettingsViewModel) - viewModelOf(::UpdaterViewModel) -}