Skip to content

Commit 409b0f0

Browse files
authored
Merge pull request EyuCoder#14 from ouattararomuald/configure-dagger
Configure dagger 👌🏽
2 parents 34b1bfe + 06ac4e2 commit 409b0f0

File tree

12 files changed

+79
-22
lines changed

12 files changed

+79
-22
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
/.idea/workspace.xml
88
/.idea/navEditor.xml
99
/.idea/assetWizardSettings.xml
10+
/.idea/.name
11+
/.idea/inspectionProfiles
12+
/.idea/codeStyles
1013
.DS_Store
1114
/build
1215
/captures

app/build.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ plugins {
44
id 'kotlin-android-extensions'
55
id 'kotlin-kapt'
66
id 'androidx.navigation.safeargs'
7+
id 'dagger.hilt.android.plugin'
78
}
89

910
android {
@@ -80,4 +81,12 @@ dependencies {
8081

8182
//Kotlin SharedPreference
8283
implementation 'androidx.preference:preference-ktx:1.1.1'
84+
85+
// Dagger Hilt
86+
implementation "com.google.dagger:hilt-android:$hilt_version"
87+
kapt "com.google.dagger:hilt-compiler:$hilt_version"
88+
}
89+
90+
kapt {
91+
correctErrorTypes true
8392
}

app/src/main/java/com/codexo/notes/JottyApp.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import android.content.SharedPreferences
55
import androidx.preference.PreferenceManager
66
import com.codexo.notes.utils.THEME_PREF_KEY
77
import com.codexo.notes.utils.ThemeUtil
8+
import dagger.hilt.android.HiltAndroidApp
89

10+
@HiltAndroidApp
911
class JottyApp : Application() {
1012

1113
override fun onCreate() {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.codexo.notes.core
2+
3+
import android.content.Context
4+
import androidx.room.Room
5+
import com.codexo.notes.data.NoteDao
6+
import com.codexo.notes.data.NoteDatabase
7+
import dagger.Module
8+
import dagger.Provides
9+
import dagger.hilt.InstallIn
10+
import dagger.hilt.android.qualifiers.ApplicationContext
11+
import dagger.hilt.components.SingletonComponent
12+
import javax.inject.Singleton
13+
14+
@Module
15+
@InstallIn(SingletonComponent::class)
16+
object DatabaseModule {
17+
18+
@Singleton
19+
@Provides
20+
fun provideDatabase(@ApplicationContext applicationContext: Context): NoteDatabase {
21+
return Room.databaseBuilder(
22+
applicationContext,
23+
NoteDatabase::class.java,
24+
"notes_db"
25+
).fallbackToDestructiveMigration().build()
26+
}
27+
28+
@Provides
29+
fun provideNoteDao(noteDatabase: NoteDatabase): NoteDao = noteDatabase.noteDao()
30+
}

app/src/main/java/com/codexo/notes/data/PrefsManager.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@ import android.content.Context
44
import androidx.preference.PreferenceManager
55
import com.codexo.notes.utils.SortBy
66
import com.codexo.notes.utils.VIEW_PREF_KEY
7+
import dagger.hilt.android.qualifiers.ApplicationContext
8+
import javax.inject.Inject
79

8-
class PrefsManager(private val context: Context) {
10+
class PrefsManager @Inject constructor(@ApplicationContext private val context: Context) {
911

1012
companion object {
1113
private const val PREFS_NAME = "JottyNotes"

app/src/main/java/com/codexo/notes/ui/MainActivity.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package com.codexo.notes.ui
22

3-
import android.content.SharedPreferences
43
import android.os.Bundle
54
import androidx.appcompat.app.AppCompatActivity
65
import androidx.navigation.NavController
76
import androidx.navigation.findNavController
87
import androidx.navigation.fragment.NavHostFragment
98
import androidx.navigation.fragment.findNavController
109
import androidx.navigation.ui.setupActionBarWithNavController
11-
import androidx.preference.PreferenceManager
1210
import com.codexo.notes.R
13-
import com.codexo.notes.utils.ThemeUtil
11+
import dagger.hilt.android.AndroidEntryPoint
1412

13+
@AndroidEntryPoint
1514
class MainActivity : AppCompatActivity() {
1615
private lateinit var navController: NavController
1716
override fun onCreate(savedInstanceState: Bundle?) {

app/src/main/java/com/codexo/notes/ui/SharedViewModel.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package com.codexo.notes.ui
22

3-
import android.app.Application
4-
import androidx.lifecycle.AndroidViewModel
3+
4+
import androidx.lifecycle.ViewModel
55
import androidx.lifecycle.viewModelScope
66
import com.codexo.notes.data.Note
7-
import com.codexo.notes.data.NoteDatabase
7+
import com.codexo.notes.data.NoteDao
8+
import dagger.hilt.android.lifecycle.HiltViewModel
89
import kotlinx.coroutines.Dispatchers
910
import kotlinx.coroutines.launch
11+
import javax.inject.Inject
1012

11-
class SharedViewModel constructor(application: Application) : AndroidViewModel(application) {
12-
private val noteDao = NoteDatabase.getInstance(application).noteDao()
13+
@HiltViewModel
14+
class SharedViewModel @Inject constructor(private val noteDao: NoteDao) : ViewModel() {
1315

1416
fun insertNote(note: Note) = viewModelScope.launch(Dispatchers.IO) { noteDao.insert(note) }
1517

app/src/main/java/com/codexo/notes/ui/add/AddFragment.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,20 @@ import android.view.View
1313
import androidx.activity.result.contract.ActivityResultContracts
1414
import androidx.core.view.isVisible
1515
import androidx.fragment.app.Fragment
16-
import androidx.fragment.app.activityViewModels
16+
import androidx.fragment.app.viewModels
1717
import androidx.navigation.fragment.findNavController
1818
import com.codexo.notes.R
1919
import com.codexo.notes.data.Note
2020
import com.codexo.notes.databinding.FragmentDetailBinding
2121
import com.codexo.notes.ui.SharedViewModel
2222
import com.codexo.notes.utils.HideKeyboard.Companion.hideKeyboard
2323
import com.google.android.material.snackbar.Snackbar
24+
import dagger.hilt.android.AndroidEntryPoint
2425
import java.util.*
2526

27+
@AndroidEntryPoint
2628
class AddFragment : Fragment(R.layout.fragment_detail) {
27-
private val viewModel: SharedViewModel by activityViewModels()
29+
private val viewModel: SharedViewModel by viewModels()
2830
private var _binding: FragmentDetailBinding? = null
2931
private val binding
3032
get() = _binding

app/src/main/java/com/codexo/notes/ui/edit/EditFragment.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import android.view.MenuItem
1212
import android.view.View
1313
import androidx.activity.result.contract.ActivityResultContracts
1414
import androidx.fragment.app.Fragment
15-
import androidx.fragment.app.activityViewModels
1615
import androidx.fragment.app.viewModels
1716
import androidx.navigation.fragment.findNavController
1817
import androidx.navigation.fragment.navArgs
@@ -23,12 +22,13 @@ import com.codexo.notes.ui.SharedViewModel
2322
import com.codexo.notes.utils.HideKeyboard.Companion.hideKeyboard
2423
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2524
import com.google.android.material.snackbar.Snackbar
25+
import dagger.hilt.android.AndroidEntryPoint
2626
import java.util.*
2727

28-
28+
@AndroidEntryPoint
2929
class EditFragment : Fragment(R.layout.fragment_detail) {
3030
private val args: EditFragmentArgs by navArgs()
31-
private val viewModel: SharedViewModel by activityViewModels()
31+
private val viewModel: SharedViewModel by viewModels()
3232
private var _binding: FragmentDetailBinding? = null
3333
private val binding
3434
get() = _binding

app/src/main/java/com/codexo/notes/ui/notes/NotesFragment.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@ import com.codexo.notes.ui.SharedViewModel
2323
import com.codexo.notes.utils.SortBy
2424
import com.google.android.material.dialog.MaterialAlertDialogBuilder
2525
import com.google.android.material.snackbar.Snackbar
26+
import dagger.hilt.android.AndroidEntryPoint
2627
import kotlinx.android.synthetic.main.fragment_notes.*
28+
import javax.inject.Inject
2729

30+
@AndroidEntryPoint
2831
class NotesFragment : Fragment(R.layout.fragment_notes), NotesAdapter.OnItemClickListener {
2932

3033
private val TAG = NotesFragment::class.java.simpleName
@@ -34,7 +37,7 @@ class NotesFragment : Fragment(R.layout.fragment_notes), NotesAdapter.OnItemClic
3437
private val binding
3538
get() = _binding
3639
private val notesAdapter = NotesAdapter(this)
37-
private val prefs: PrefsManager by lazy { PrefsManager(requireContext()) }
40+
@Inject lateinit var prefs: PrefsManager
3841

3942
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4043
super.onViewCreated(view, savedInstanceState)

0 commit comments

Comments
 (0)