From fbd2372cbaee93f4e8e672e6b5e1291011e17235 Mon Sep 17 00:00:00 2001 From: "sungyong.an" Date: Sun, 4 Oct 2026 12:58:25 +0900 Subject: [PATCH] Replace HiltWorker with a Hilt entry point The two workers now use WorkManager's default (Context, WorkerParameters) constructor and get their use case from WorkerEntryPoint, so WorkManager can use its default initializer and worker factory. Remove the custom WorkManagerInitializer, its Dagger component, the startup provider manifest, androidx.hilt:hilt-work and its compiler, and the redundant KSP plugin declaration. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Upxj1FvQeDpycupKdPQHUZ --- app/dependencies/releaseRuntimeClasspath.txt | 2 - app/proguardShield/releaseFastRules.txt | 1 - feature/tasks/impl/build.gradle | 4 -- .../tasks/impl/src/main/AndroidManifest.xml | 21 ------- .../tasks/impl/AnnounceOpenDateWorker.kt | 17 +++--- .../feature/tasks/impl/SyncOpenDateWorker.kt | 17 +++--- .../tasks/impl/WorkManagerInitializer.kt | 57 ------------------- .../tasks/impl/di/InitializerComponent.kt | 34 ----------- ...zerDependencies.kt => WorkerEntryPoint.kt} | 9 ++- gradle/libs.versions.toml | 2 - 10 files changed, 24 insertions(+), 140 deletions(-) delete mode 100644 feature/tasks/impl/src/main/AndroidManifest.xml delete mode 100644 feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/WorkManagerInitializer.kt delete mode 100644 feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/InitializerComponent.kt rename feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/{InitializerDependencies.kt => WorkerEntryPoint.kt} (76%) diff --git a/app/dependencies/releaseRuntimeClasspath.txt b/app/dependencies/releaseRuntimeClasspath.txt index ef602f696..b52d5770b 100644 --- a/app/dependencies/releaseRuntimeClasspath.txt +++ b/app/dependencies/releaseRuntimeClasspath.txt @@ -94,10 +94,8 @@ androidx.emoji2:emoji2:1.4.0 androidx.exifinterface:exifinterface:1.4.1 androidx.fragment:fragment:1.5.4 androidx.graphics:graphics-path:1.0.1 -androidx.hilt:hilt-common:1.3.0 androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0 androidx.hilt:hilt-lifecycle-viewmodel:1.3.0 -androidx.hilt:hilt-work:1.3.0 androidx.interpolator:interpolator:1.0.0 androidx.legacy:legacy-support-core-utils:1.0.0 androidx.lifecycle:lifecycle-common-java8:2.10.0 diff --git a/app/proguardShield/releaseFastRules.txt b/app/proguardShield/releaseFastRules.txt index 6ecb65fa7..2588813f8 100644 --- a/app/proguardShield/releaseFastRules.txt +++ b/app/proguardShield/releaseFastRules.txt @@ -440,7 +440,6 @@ static java.lang.Void compose*RuntimeError(...); -keepclassmembers,allowshrinking,allowobfuscation interface * { @retrofit2.http.* ; } --keepnames @androidx.hilt.work.HiltWorker class * extends androidx.work.ListenableWorker -keepnames @kotlinx.serialization.internal.NamedCompanion class * -keepnames class * extends androidx.startup.Initializer -keepnames class * extends androidx.work.InputMerger diff --git a/feature/tasks/impl/build.gradle b/feature/tasks/impl/build.gradle index 72736c8c9..dadb48965 100644 --- a/feature/tasks/impl/build.gradle +++ b/feature/tasks/impl/build.gradle @@ -1,6 +1,5 @@ plugins { id "moop.android.feature" - id "com.google.devtools.ksp" } android { @@ -15,9 +14,6 @@ dependencies { implementation projects.feature.tasks.api implementation projects.feature.notification.api - implementation libs.androidx.hilt.work - ksp libs.androidx.hilt.compiler - implementation libs.androidx.work.runtime androidTestImplementation libs.androidx.work.testing diff --git a/feature/tasks/impl/src/main/AndroidManifest.xml b/feature/tasks/impl/src/main/AndroidManifest.xml deleted file mode 100644 index c2f377881..000000000 --- a/feature/tasks/impl/src/main/AndroidManifest.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - diff --git a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/AnnounceOpenDateWorker.kt b/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/AnnounceOpenDateWorker.kt index 402338bd7..4aeaaab1d 100644 --- a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/AnnounceOpenDateWorker.kt +++ b/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/AnnounceOpenDateWorker.kt @@ -16,20 +16,21 @@ package soup.movie.feature.tasks.impl import android.content.Context -import androidx.hilt.work.HiltWorker import androidx.work.CoroutineWorker import androidx.work.WorkerParameters -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dagger.hilt.android.EntryPointAccessors +import soup.movie.feature.tasks.impl.di.WorkerEntryPoint import soup.movie.log.Logger -@HiltWorker -class AnnounceOpenDateWorker @AssistedInject constructor( - @Assisted context: Context, - @Assisted params: WorkerParameters, - private val announceOpenDate: AnnounceOpenDateUseCase, +class AnnounceOpenDateWorker( + context: Context, + params: WorkerParameters, ) : CoroutineWorker(context, params) { + private val announceOpenDate = EntryPointAccessors + .fromApplication(context, WorkerEntryPoint::class.java) + .announceOpenDate() + override suspend fun doWork(): Result { Logger.d("doWork: start!") return try { diff --git a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/SyncOpenDateWorker.kt b/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/SyncOpenDateWorker.kt index e98232960..93a9376f4 100644 --- a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/SyncOpenDateWorker.kt +++ b/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/SyncOpenDateWorker.kt @@ -16,20 +16,21 @@ package soup.movie.feature.tasks.impl import android.content.Context -import androidx.hilt.work.HiltWorker import androidx.work.CoroutineWorker import androidx.work.WorkerParameters -import dagger.assisted.Assisted -import dagger.assisted.AssistedInject +import dagger.hilt.android.EntryPointAccessors +import soup.movie.feature.tasks.impl.di.WorkerEntryPoint import soup.movie.log.Logger -@HiltWorker -class SyncOpenDateWorker @AssistedInject constructor( - @Assisted context: Context, - @Assisted params: WorkerParameters, - private val syncOpenDate: SyncOpenDateUseCase, +class SyncOpenDateWorker( + context: Context, + params: WorkerParameters, ) : CoroutineWorker(context, params) { + private val syncOpenDate = EntryPointAccessors + .fromApplication(context, WorkerEntryPoint::class.java) + .syncOpenDate() + override suspend fun doWork(): Result { Logger.d("doWork: start!") return try { diff --git a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/WorkManagerInitializer.kt b/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/WorkManagerInitializer.kt deleted file mode 100644 index d3029083f..000000000 --- a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/WorkManagerInitializer.kt +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2023 SOUP - * - * 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 - * - * https://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 soup.movie.feature.tasks.impl - -import android.content.Context -import androidx.hilt.work.HiltWorkerFactory -import androidx.startup.Initializer -import androidx.work.Configuration -import androidx.work.WorkManager -import dagger.hilt.android.EntryPointAccessors -import soup.movie.feature.tasks.impl.di.DaggerInitializerComponent -import soup.movie.feature.tasks.impl.di.InitializerDependencies -import javax.inject.Inject - -class WorkManagerInitializer : Initializer { - - @Inject - lateinit var workerFactory: HiltWorkerFactory - - override fun create(context: Context): WorkManager { - DaggerInitializerComponent.builder() - .context(context) - .appDependencies( - EntryPointAccessors.fromApplication( - context.applicationContext, - InitializerDependencies::class.java, - ), - ) - .build() - .inject(this) - - WorkManager.initialize( - context, - Configuration.Builder() - .setWorkerFactory(workerFactory) - .build(), - ) - return WorkManager.getInstance(context) - } - - override fun dependencies(): List>> { - return emptyList() - } -} diff --git a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/InitializerComponent.kt b/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/InitializerComponent.kt deleted file mode 100644 index a7fc6de04..000000000 --- a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/InitializerComponent.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2021 SOUP - * - * 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 - * - * https://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 soup.movie.feature.tasks.impl.di - -import android.content.Context -import dagger.BindsInstance -import dagger.Component -import soup.movie.feature.tasks.impl.WorkManagerInitializer - -@Component(dependencies = [InitializerDependencies::class]) -interface InitializerComponent { - - fun inject(initializer: WorkManagerInitializer) - - @Component.Builder - interface Builder { - fun context(@BindsInstance context: Context): Builder - fun appDependencies(dependencies: InitializerDependencies): Builder - fun build(): InitializerComponent - } -} diff --git a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/InitializerDependencies.kt b/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/WorkerEntryPoint.kt similarity index 76% rename from feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/InitializerDependencies.kt rename to feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/WorkerEntryPoint.kt index 8809b29ed..d687cef68 100644 --- a/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/InitializerDependencies.kt +++ b/feature/tasks/impl/src/main/java/soup/movie/feature/tasks/impl/di/WorkerEntryPoint.kt @@ -15,14 +15,17 @@ */ package soup.movie.feature.tasks.impl.di -import androidx.hilt.work.HiltWorkerFactory import dagger.hilt.EntryPoint import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +import soup.movie.feature.tasks.impl.AnnounceOpenDateUseCase +import soup.movie.feature.tasks.impl.SyncOpenDateUseCase @EntryPoint @InstallIn(SingletonComponent::class) -interface InitializerDependencies { +interface WorkerEntryPoint { - fun workerFactory(): HiltWorkerFactory + fun syncOpenDate(): SyncOpenDateUseCase + + fun announceOpenDate(): AnnounceOpenDateUseCase } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c6a6f260a..2cdd21d9e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -60,8 +60,6 @@ dagger-hilt-android = { module = "com.google.dagger:hilt-android", version.ref = dagger-hilt-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "dagger" } dagger-hilt-testing = { module = "com.google.dagger:hilt-android-testing", version.ref = "dagger" } -androidx-hilt-work = { module = "androidx.hilt:hilt-work", version.ref = "androidxhilt" } -androidx-hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "androidxhilt" } androidx-hilt-lifecycle-viewmodel-compose = { module = "androidx.hilt:hilt-lifecycle-viewmodel-compose", version.ref = "androidxhilt" } # AndroidX