@@ -20,6 +20,7 @@ import androidx.annotation.VisibleForTesting
20
20
import androidx.room.Room
21
21
import com.example.android.architecture.blueprints.todoapp.data.FakeTasksRemoteDataSource
22
22
import com.example.android.architecture.blueprints.todoapp.data.source.DefaultTasksRepository
23
+ import com.example.android.architecture.blueprints.todoapp.data.source.TasksDataSource
23
24
import com.example.android.architecture.blueprints.todoapp.data.source.TasksRepository
24
25
import com.example.android.architecture.blueprints.todoapp.data.source.local.TasksLocalDataSource
25
26
import com.example.android.architecture.blueprints.todoapp.data.source.local.ToDoDatabase
@@ -44,16 +45,21 @@ object ServiceLocator {
44
45
}
45
46
46
47
private fun createTasksRepository (context : Context ): TasksRepository {
47
- database = Room .databaseBuilder(
48
+ return DefaultTasksRepository (FakeTasksRemoteDataSource , createTaskLocalDataSource(context))
49
+ }
50
+
51
+ private fun createTaskLocalDataSource (context : Context ): TasksDataSource {
52
+ val database = database ? : createDataBase(context)
53
+ return TasksLocalDataSource (database.taskDao())
54
+ }
55
+
56
+ private fun createDataBase (context : Context ): ToDoDatabase {
57
+ val result = Room .databaseBuilder(
48
58
context.applicationContext,
49
59
ToDoDatabase ::class .java, " Tasks.db"
50
- )
51
- .build()
52
-
53
- return DefaultTasksRepository (
54
- FakeTasksRemoteDataSource ,
55
- TasksLocalDataSource (database!! .taskDao())
56
- )
60
+ ).build()
61
+ database = result
62
+ return result
57
63
}
58
64
59
65
@VisibleForTesting
@@ -67,6 +73,7 @@ object ServiceLocator {
67
73
clearAllTables()
68
74
close()
69
75
}
76
+ database = null
70
77
tasksRepository = null
71
78
}
72
79
}
0 commit comments