diff --git a/android/app/src/main/java/com/fabledsword/minstrel/MainActivity.kt b/android/app/src/main/java/com/fabledsword/minstrel/MainActivity.kt index b413a0d6..97e9824d 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/MainActivity.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/MainActivity.kt @@ -10,9 +10,9 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import dagger.hilt.android.AndroidEntryPoint -// @AndroidEntryPoint added in Task 1.3 alongside @HiltAndroidApp on MinstrelApplication -// (Hilt KSP errors without an annotated Application class). +@AndroidEntryPoint class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/android/app/src/main/java/com/fabledsword/minstrel/MinstrelApplication.kt b/android/app/src/main/java/com/fabledsword/minstrel/MinstrelApplication.kt new file mode 100644 index 00000000..34f149c5 --- /dev/null +++ b/android/app/src/main/java/com/fabledsword/minstrel/MinstrelApplication.kt @@ -0,0 +1,23 @@ +package com.fabledsword.minstrel + +import android.app.Application +import androidx.hilt.work.HiltWorkerFactory +import androidx.work.Configuration +import dagger.hilt.android.HiltAndroidApp +import timber.log.Timber +import javax.inject.Inject + +@HiltAndroidApp +class MinstrelApplication : Application(), Configuration.Provider { + @Inject lateinit var workerFactory: HiltWorkerFactory + + override fun onCreate() { + super.onCreate() + if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree()) + } + + override val workManagerConfiguration: Configuration + get() = Configuration.Builder() + .setWorkerFactory(workerFactory) + .build() +} diff --git a/android/app/src/main/java/com/fabledsword/minstrel/di/AppModule.kt b/android/app/src/main/java/com/fabledsword/minstrel/di/AppModule.kt new file mode 100644 index 00000000..1add2f76 --- /dev/null +++ b/android/app/src/main/java/com/fabledsword/minstrel/di/AppModule.kt @@ -0,0 +1,33 @@ +package com.fabledsword.minstrel.di + +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.serialization.json.Json +import javax.inject.Qualifier +import javax.inject.Singleton + +@Qualifier +@Retention(AnnotationRetention.BINARY) +annotation class ApplicationScope + +@Module +@InstallIn(SingletonComponent::class) +object AppModule { + @Provides + @Singleton + fun provideJson(): Json = Json { + ignoreUnknownKeys = true + explicitNulls = false + coerceInputValues = true + } + + @Provides + @Singleton + @ApplicationScope + fun provideAppScope(): CoroutineScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) +}