Przeglądaj źródła

Moved database to app class

Vadik Sirekanyan 2 lat temu
rodzic
commit
1b8262d50a

+ 9 - 0
app/src/main/java/org/sirekanyan/outline/App.kt

@@ -2,6 +2,11 @@ package org.sirekanyan.outline
 
 import android.app.Application
 import android.content.Context
+import app.cash.sqldelight.driver.android.AndroidSqliteDriver
+import org.sirekanyan.outline.db.OutlineDatabase
+
+fun Context.app(): App =
+    applicationContext as App
 
 @Suppress("KotlinConstantConditions")
 fun isPlayFlavor(): Boolean =
@@ -9,6 +14,10 @@ fun isPlayFlavor(): Boolean =
 
 class App : Application() {
 
+    val database: OutlineDatabase by lazy {
+        OutlineDatabase(AndroidSqliteDriver(OutlineDatabase.Schema, this, "outline.db"))
+    }
+
     override fun attachBaseContext(base: Context?) {
         super.attachBaseContext(base)
         CrashReporter.init(this)

+ 5 - 7
app/src/main/java/org/sirekanyan/outline/db/ApiUrlDao.kt

@@ -1,26 +1,24 @@
 package org.sirekanyan.outline.db
 
-import android.app.Application
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
 import androidx.compose.ui.platform.LocalContext
 import app.cash.sqldelight.coroutines.asFlow
 import app.cash.sqldelight.coroutines.mapToList
-import app.cash.sqldelight.driver.android.AndroidSqliteDriver
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.flow.Flow
+import org.sirekanyan.outline.app
 import org.sirekanyan.outline.db.model.ApiUrl
 
 @Composable
 fun rememberApiUrlDao(): ApiUrlDao {
-    val app = LocalContext.current.applicationContext as Application
-    return remember { ApiUrlDao(app) }
+    val database = LocalContext.current.app().database
+    return remember { ApiUrlDao(database) }
 }
 
-class ApiUrlDao(app: Application) {
+class ApiUrlDao(database: OutlineDatabase) {
 
-    private val driver = AndroidSqliteDriver(OutlineDatabase.Schema, app, "outline.db")
-    private val queries = OutlineDatabase(driver).apiUrlQueries
+    private val queries = database.apiUrlQueries
 
     fun observeUrls(): Flow<List<ApiUrl>> =
         queries.selectUrls().asFlow().mapToList(Dispatchers.IO)