app: switch to Hilt for dependency injection

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
This commit is contained in:
Harsh Shandilya 2020-09-11 23:35:58 +05:30
parent 57f7a72d8d
commit d42657b0a5
No known key found for this signature in database
GPG key ID: 366D7BBAD1031E80
4 changed files with 29 additions and 26 deletions

View file

@ -1,11 +1,8 @@
package dev.msfjarvis.todo package dev.msfjarvis.todo
import android.app.Application import android.app.Application
import dev.msfjarvis.todo.di.Graph import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class Application : Application() { class Application : Application() {
override fun onCreate() {
super.onCreate()
Graph.provide(this)
}
} }

View file

@ -26,20 +26,25 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.ui.tooling.preview.Preview import androidx.ui.tooling.preview.Preview
import dagger.hilt.android.AndroidEntryPoint
import dev.msfjarvis.todo.compose.utils.IconResource import dev.msfjarvis.todo.compose.utils.IconResource
import dev.msfjarvis.todo.data.model.TodoItem import dev.msfjarvis.todo.data.model.TodoItem
import dev.msfjarvis.todo.di.Graph import dev.msfjarvis.todo.data.source.TodoDatabase
import dev.msfjarvis.todo.ui.TodoRowItem import dev.msfjarvis.todo.ui.TodoRowItem
import dev.msfjarvis.todo.ui.TodoTheme import dev.msfjarvis.todo.ui.TodoTheme
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject
@AndroidEntryPoint
class MainActivity : AppCompatActivity() { class MainActivity : AppCompatActivity() {
@Inject lateinit var database: TodoDatabase
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContent { setContent {
TodoTheme { TodoTheme {
val coroutineScope = rememberCoroutineScope() val coroutineScope = rememberCoroutineScope()
val itemsDao = Graph.database.todoItemsDao() val itemsDao = database.todoItemsDao()
val items by itemsDao.getAllItems().collectAsState(initial = emptyList()) val items by itemsDao.getAllItems().collectAsState(initial = emptyList())
TodoApp( TodoApp(
items, items,

View file

@ -1,19 +0,0 @@
package dev.msfjarvis.todo.di
import android.content.Context
import androidx.room.Room
import dev.msfjarvis.todo.data.source.TodoDatabase
/**
* Rudimentary DI container to initialize singletons, will be switched to Hilt when architecture becomes
* a focus again.
*/
object Graph {
lateinit var database: TodoDatabase
fun provide(context: Context) {
database = Room.databaseBuilder(context, TodoDatabase::class.java, "data.db")
.fallbackToDestructiveMigration().build()
}
}

View file

@ -0,0 +1,20 @@
package dev.msfjarvis.todo.di
import android.content.Context
import androidx.room.Room
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import dev.msfjarvis.todo.data.source.TodoDatabase
@InstallIn(SingletonComponent::class)
@Module
object PersistenceModule {
@Provides
fun provideItemsDatabase(@ApplicationContext context: Context): TodoDatabase {
return Room.databaseBuilder(context, TodoDatabase::class.java, "data.db")
.fallbackToDestructiveMigration().build()
}
}